最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Vue keepalive學(xué)習(xí)用法及場(chǎng)景分析

 更新時(shí)間:2025年03月21日 11:49:32   作者:前端熊貓  
在Vue中,<keep-alive>的include屬性用于指定需要緩存的組件,本文給大家介紹Vue keepalive學(xué)習(xí)用法及場(chǎng)景分析,感興趣的朋友一起看看吧

在Vue中,<keep-alive>include屬性用于指定需要緩存的組件,其實(shí)現(xiàn)方式如下:

1. 基本用法

字符串形式:通過(guò)逗號(hào)分隔組件名稱,匹配到的組件會(huì)被緩存。

<keep-alive include="ComponentA,ComponentB">
  <component :is="currentComponent"></component>
</keep-alive>

此時(shí)僅緩存名稱為ComponentAComponentB的組件。

正則表達(dá)式:使用v-bind動(dòng)態(tài)綁定正則表達(dá)式,匹配組件名稱。

<keep-alive :include="/Component[A-Z]/">
  <component :is="currentComponent"></component>
</keep-alive>

此時(shí)匹配名稱以Component開頭且后續(xù)為大寫字母的組件。

數(shù)組形式:通過(guò)數(shù)組動(dòng)態(tài)指定緩存組件。

<keep-alive :include="['ComponentA', 'ComponentB']">
  <component :is="currentComponent"></component>
</keep-alive>

支持動(dòng)態(tài)計(jì)算屬性返回?cái)?shù)組,例如結(jié)合路由元信息。

2. 動(dòng)態(tài)控制緩存

結(jié)合路由元信息:在路由配置中通過(guò)meta字段標(biāo)記需緩存的組件,再通過(guò)計(jì)算屬性動(dòng)態(tài)生成include值。

// 路由配置
const routes = [
  { path: '/pageA', component: PageA, meta: { keepAlive: true } },
  { path: '/pageB', component: PageB, meta: { keepAlive: false } }
];
// 動(dòng)態(tài)include
<keep-alive :include="cachedComponents">
  <router-view></router-view>
</keep-alive>
computed: {
  cachedComponents() {
    return this.$route.matched
      .filter(route => route.meta.keepAlive)
      .map(route => route.name);
  }
}

此方式通過(guò)路由元信息靈活控制緩存。

3. 注意事項(xiàng)

• 組件需設(shè)置name屬性:include通過(guò)組件名稱匹配,因此被緩存組件必須顯式定義name屬性。
• 優(yōu)先級(jí):若同時(shí)存在includeexcludeexclude的優(yōu)先級(jí)更高。例如:

<keep-alive include="A,B" exclude="B">
  <component :is="currentComponent"></component>
</keep-alive>

此時(shí)僅緩存組件A,因B被排除。

4. 生命周期鉤子

被緩存的組件會(huì)觸發(fā)activated(激活時(shí))和deactivated(停用時(shí))鉤子,而非createdmounted,需在對(duì)應(yīng)鉤子中處理狀態(tài)更新。

1. <keep-alive> 的生命周期流程

當(dāng)組件被包裹在 <keep-alive> 內(nèi)時(shí),其生命周期會(huì)分為以下階段:

階段觸發(fā)條件回調(diào)鉤子行為說(shuō)明
初次進(jìn)入組件首次被渲染created, mounted正常初始化,執(zhí)行邏輯
切換至其他組件組件被切換到非活動(dòng)狀態(tài)deactivated停用回調(diào),保存狀態(tài)或清理資源
再次被激活組件重新進(jìn)入活動(dòng)狀態(tài)activated激活回調(diào),恢復(fù)狀態(tài)或刷新數(shù)據(jù)
組件銷毀緩存達(dá)到 max 限制或手動(dòng)銷毀destroyed銷毀組件實(shí)例,釋放內(nèi)存

2. 關(guān)鍵生命周期鉤子詳解

(1) activated 鉤子

觸發(fā)時(shí)機(jī):組件從緩存中被重新激活時(shí)(例如用戶返回到該頁(yè)面)。
典型用途
• 加載最新數(shù)據(jù)(例如從服務(wù)端獲?。?br />• 恢復(fù)動(dòng)態(tài)修改的 DOM 狀態(tài)(如滾動(dòng)位置、定時(shí)器)。
• 更新組件內(nèi)部狀態(tài)(如重置表單或重新計(jì)算數(shù)據(jù))。
示例

export default {
  activated() {
    console.log('組件被激活');
    this.fetchData(); // 刷新數(shù)據(jù)
    this.initTimer(); // 重啟定時(shí)器
  },
};

(2) deactivated 鉤子

觸發(fā)時(shí)機(jī):組件被切換到緩存中(例如用戶跳轉(zhuǎn)到其他頁(yè)面)。
典型用途
• 取消定時(shí)器或異步操作,避免內(nèi)存泄漏。
• 保存當(dāng)前狀態(tài)到本地存儲(chǔ)或 Vuex。
• 暫停動(dòng)畫或視頻播放。
示例

export default {
  deactivated() {
    console.log('組件被停用');
    clearInterval(this.timer); // 清除定時(shí)器
    this.saveScrollPosition(); // 保存滾動(dòng)位置
  },
};

(3) destroyed 鉤子

觸發(fā)時(shí)機(jī):當(dāng)組件被徹底銷毀時(shí)(例如緩存滿后被移除,或調(diào)用 $destroy())。
典型用途
• 釋放強(qiáng)引用資源(如 WebSocket 連接)。
• 清理全局事件監(jiān)聽器。
注意:僅在組件被銷毀時(shí)觸發(fā),緩存中的組件不會(huì)觸發(fā)此鉤子。

3. 生命周期對(duì)比(普通組件 vs <keep-alive> 組件)

鉤子普通組件<keep-alive> 組件
created??(僅第一次初始化時(shí)觸發(fā))
mounted??(僅第一次初始化時(shí)觸發(fā))
updated??
deactivated??(停用時(shí)觸發(fā))
activated??(激活時(shí)觸發(fā))
destroyed?(組件銷毀時(shí)觸發(fā))?(緩存超限或手動(dòng)銷毀時(shí)觸發(fā))

4. 實(shí)際應(yīng)用場(chǎng)景

場(chǎng)景 1:頁(yè)面切換時(shí)保留滾動(dòng)位置

export default {
  data() {
    return { scrollY: 0 };
  },
  activated() {
    // 恢復(fù)滾動(dòng)位置
    window.scrollTo(0, this.scrollY);
  },
  deactivated() {
    // 保存滾動(dòng)位置
    this.scrollY = window.scrollY;
  },
};

場(chǎng)景 2:列表頁(yè)滾動(dòng)加載數(shù)據(jù)

export default {
  data() {
    return { page: 1, loading: false };
  },
  activated() {
    if (!this.loading) {
      this.fetchMoreData(); // 刷新數(shù)據(jù)
    }
  },
};

5. 注意事項(xiàng)

狀態(tài)管理
• 緩存組件不會(huì)銷毀實(shí)例,因此需謹(jǐn)慎處理狀態(tài)(如避免重復(fù)請(qǐng)求數(shù)據(jù))。
• 推薦結(jié)合 Vuex 或本地存儲(chǔ)管理全局狀態(tài)。

性能優(yōu)化
• 使用 max 屬性限制緩存數(shù)量,避免內(nèi)存占用過(guò)高。
• 在 deactivated 中清理不必要的資源(如定時(shí)器、事件監(jiān)聽)。

組件名匹配
• 確保被緩存的組件顯式聲明了 name 屬性(include/exclude 依賴組件名匹配)。

總結(jié)

<keep-alive> 的生命周期機(jī)制通過(guò) activateddeactivated 鉤子,實(shí)現(xiàn)了組件狀態(tài)的暫停與恢復(fù)

到此這篇關(guān)于Vue keepalive學(xué)習(xí)用法的文章就介紹到這了,更多相關(guān)Vue keepalive用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

乌兰察布市| 白玉县| 环江| 视频| 黎平县| 辉南县| 兰考县| 宜城市| 翁牛特旗| 泽普县| 浏阳市| 亚东县| 金平| 新巴尔虎左旗| 高雄市| 博白县| 桂东县| 青川县| 加查县| 抚松县| 汉沽区| 临澧县| 蛟河市| 安福县| 杭锦旗| 洞口县| 大英县| 泰来县| 纳雍县| 肇州县| 宜春市| 白朗县| 大连市| 江川县| 黔西县| 镇康县| 都昌县| 乌兰察布市| 庄河市| 社会| 镇雄县|