欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue中KeepAlive內置緩存使用詳解

 更新時間:2023年10月10日 08:44:46   作者:程序員大飛1  
KeepAlive 是 vue 中的內置組件,當多個組件動態(tài)切換時可以對實例狀態(tài)進行緩存,本文就來詳細的介紹一下Vue中KeepAlive內置緩存使用,感興趣的可以了解一下

KeepAlive 介紹及使用場景

KeepAlive 是 vue 中的內置組件,當多個組件動態(tài)切換時可以對實例狀態(tài)進行緩存,用法如下

<router-view v-slot="{ Component }">
    <keep-alive>
    	<component :is="Component" />
    </keep-alive>    
 </router-view>

router-view 中定義了一個信號槽,來渲染跳轉后的組件,將keep-alive 標簽封裝在 組件的外面,即可實現(xiàn)路由跳轉組件的緩存效果

KeepAlive 使用實例

下圖有兩個組件 頁面1 和 頁面2,組件頁面切換 通過 點擊按鈕 實現(xiàn)

頁面1 是一個計數(shù)器,加一減一,默認初始值為 0;點擊按鈕 頁面2 ,會跳轉一個 含有輸入框的頁面,輸入框默認為空;

正常情況下,組件切換都會將組件置為初始化狀態(tài),不會緩存歷史數(shù)據(jù);如當頁面1 中通過觸發(fā) 增加、減少按鈕將當前值置為 5 后,當切換到頁面2 再切換至 頁面1 ,當前值會被重置為0,原有歷史數(shù)據(jù)并沒有被緩存下來

而 keepAlive 可以在切換時將組件內的原有狀態(tài)數(shù)據(jù)進行緩存;使用時只需要將需要緩存的組件外面包裹一層 <keepAlive></keepAlive> 標簽即可,如下:

<template>
  <div class="main-test">
    <div style="margin-top:20px;margin-left: 20px;">
      <a-space>
        <a-button type="primary" style="color: blue; font-size: 14px" @click="changePageName"
          :disabled="pageName === 'A'">
          頁面1
        </a-button>
        <a-button type="primary" style="color: blue; font-size: 14px" @click="changePageName"
          :disabled="pageName === 'B'">
          頁面2
        </a-button>
      </a-space>
    </div>
    <keep-alive>
      <Page1 v-if="pageName === 'A'" style="margin-left: 20px; font-size: 16px; margin-top: 25px;">
      </Page1>
    </keep-alive>
    <keep-alive>
      <Page2 v-if="pageName === 'B'" style="margin-left: 20px; font-size: 16px; margin-top: 25px;">
      </Page2>
    </keep-alive>
  </div>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import { useRouter } from 'vue-router'
import Page1 from '@/components/test/Page1.vue';
import Page2 from '@/components/test/Page2.vue';
const pageName = ref('A')
function changePageName() {
  pageName.value = pageName.value === 'A' ? 'B' : 'A'
}
</script>

Page1 組件

<template>
    <div style="color: black;">
        當前值為{{ pageName }}
        <div style="margin-top: 20px;">
            <a-space>
                <a-button @click="addNum" type="primary">
                    增加
                </a-button>
                <a-button @click="minusNum" type="primary">
                    減少
                </a-button>
            </a-space>
        </div>
    </div>
</template>
<script setup>
import { ref } from 'vue'
const pageName = ref(0)
function addNum() {
    pageName.value += 1
}
function minusNum() {
    pageName.value -= 1
}
</script>
<style scoped lang="less">
.main-test {
    font-size: large;
    color: red;
    font-weight: bold;
}
</style>

Page2 組件

<template>
    <div style="color: black;">
        輸入值
        <a-input v-model:value="pageName" style="margin-top: 20px; width: 300px;" placeholder="請輸入需要添加的值"></a-input>
    </div>
</template>
<script setup>
import { ref } from 'vue'
const pageName = ref('')
</script>
<style scoped lang="less">
.main-test {
    font-size: large;
    color: red;
    font-weight: bold;
}
</style>

頁面 Page1 和 頁面 Page2 組件的外層都加了一層 <keep-alive></keep-alive> 標簽,這樣無論從頁面1切換到 2 還是2 切換到1 ,兩個組件內的數(shù)據(jù)狀態(tài)都會得到緩存,不需要重新加載

借助 Include /Exclude 屬性 條件緩存

KeepAlive 默認緩存標簽內所有組件,提供 includeexclude 屬性可以實現(xiàn)條件緩存,支持逗號分隔、正則表達式,或者類型數(shù)組等三種形式

具體用法如下:

<!-- 逗號隔離的字符串,匹配 name 為 a 或 b 的組件  -->
<KeepAlive include="a,b">
  <component :is="view" />
</KeepAlive>
<!--正則表達式 ,匹配 name 不為 a 或 b 的組件-->
<KeepAlive :exclude="/a|b/">
  <component :is="view" />
</KeepAlive>
<!--數(shù)組 ,匹配 name 為 a 或 b 的組件 -->
<KeepAlive :include="['a', 'b']">
  <component :is="view" />
</KeepAlive>

上面屬性內容匹配的都是組件 的 name option ,當組件需要被 keepAlive 條件緩存時,都需要指定 組件的 name

vue2 中 單文件 組件 指定 name 方式如下

<template>
 <div>
 </div>
</template>
<script>
export default {
  name: 'test'
}
</script>

vue3 中 單文件 組件 name 指定,自 3.2.34 以后版本自動將 文件的文件名指定為 name,移除了手動聲明方式

max 指定 最大緩存實例 次數(shù)

<KeepAlive> 中 通過指定 max 屬性來限制組件實例的最大緩存次數(shù),當緩存實例次數(shù)達到max 值,則將最少訪問 實例 銷毀 為新示例創(chuàng)建預留空間

<KeepAlive :max="10">
  <component :is="activeComponent" />
</KeepAlive>

實例緩存的鉤子函數(shù)

被 KeepAlive 緩存的組件實例,當組件掛載或銷毀時會分別觸發(fā) activated()deactivated()鉤子 函數(shù),而不是 unmounted()mounted()

如果要在實例掛載或銷毀時做一些操作,可以把相關邏輯寫入兩個鉤子函數(shù)里:

<script setup>
import { onActivated, onDeactivated } from 'vue'
onActivated(() => {
  // called on initial mount
  // and every time it is re-inserted from the cache
})
onDeactivated(() => {
  // called when removed from the DOM into the cache
  // and also when unmounted
})
</script>

參考

https://vuejs.org/guide/built-ins/keep-alive.html#basic-usage

到此這篇關于Vue中KeepAlive內置緩存使用詳解的文章就介紹到這了,更多相關Vue KeepAlive 內置緩存內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • vue如何動態(tài)給data中添加變量

    vue如何動態(tài)給data中添加變量

    這篇文章主要介紹了vue如何動態(tài)給data中添加變量問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Vue子組件向父組件傳值示范方法

    Vue子組件向父組件傳值示范方法

    這篇文章主要介紹了Vue子組件向父組件傳值方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-03-03
  • vue3?中?computed?新用法示例小結

    vue3?中?computed?新用法示例小結

    這篇文章主要介紹?vue3?中?computed?的新用法,對比?vue2?中的寫法,讓您快速掌握?vue3?中?computed?的新用法,對函數(shù)式寫法,options?寫法相關知識感興趣的朋友一起看看吧
    2021-11-11
  • 分享一個基于Ace的Markdown編輯器

    分享一個基于Ace的Markdown編輯器

    相信開發(fā)中或多或少都會有使用md的時候。那么一個簡易的md編輯器顯得尤為重要,如果想要在自己的項目中添加一個md編輯器,那么不妨來看看這篇文章
    2021-10-10
  • 如何利用VUE監(jiān)聽網(wǎng)頁關閉并執(zhí)行退出操作

    如何利用VUE監(jiān)聽網(wǎng)頁關閉并執(zhí)行退出操作

    這篇文章主要給大家介紹了關于如何利用VUE監(jiān)聽網(wǎng)頁關閉并執(zhí)行退出操作的相關資料,因為項目中需求,瀏覽器關閉時進行一些操作處理,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-08-08
  • vue3項目keepAlive使用方法詳解

    vue3項目keepAlive使用方法詳解

    keepalive是Vue的內置組件,作用是將組件緩存在內存當中,防止重復渲染DOM,屬于消耗內存獲取速度,這篇文章主要介紹了vue3項目keepAlive使用方法,主要將keepaliev在vue3.0中的用法,需要的朋友可以參考下
    2024-03-03
  • Vue.js更改調試地址端口號的實例

    Vue.js更改調試地址端口號的實例

    今天小編就為大家分享一篇Vue.js更改調試地址端口號的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue實現(xiàn)簡單基礎的圖片裁剪功能

    Vue實現(xiàn)簡單基礎的圖片裁剪功能

    這篇文章主要為大家詳細介紹了如何利用Vue2實現(xiàn)簡單基礎的圖片裁剪功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-09-09
  • vue中關于el-popover的使用

    vue中關于el-popover的使用

    這篇文章主要介紹了vue中關于el-popover的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue前端獲取/切換麥克風、播放采集音頻和采集音量大小完整代碼

    vue前端獲取/切換麥克風、播放采集音頻和采集音量大小完整代碼

    這篇文章主要給大家介紹了關于vue前端獲取/切換麥克風、播放采集音頻和采集音量大小的相關資料,文中通過圖文以及代碼介紹的非常詳細,對大家學習或者使用vue具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-12-12

最新評論