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

Vue keepalive學習用法及場景分析

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

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

1. 基本用法

字符串形式:通過逗號分隔組件名稱,匹配到的組件會被緩存。

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

此時僅緩存名稱為ComponentAComponentB的組件。

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

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

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

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

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

支持動態(tài)計算屬性返回數(shù)組,例如結合路由元信息。

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

結合路由元信息:在路由配置中通過meta字段標記需緩存的組件,再通過計算屬性動態(tài)生成include值。

// 路由配置
const routes = [
  { path: '/pageA', component: PageA, meta: { keepAlive: true } },
  { path: '/pageB', component: PageB, meta: { keepAlive: false } }
];
// 動態(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);
  }
}

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

3. 注意事項

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

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

此時僅緩存組件A,因B被排除。

4. 生命周期鉤子

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

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

當組件被包裹在 <keep-alive> 內時,其生命周期會分為以下階段:

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

2. 關鍵生命周期鉤子詳解

(1) activated 鉤子

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

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

(2) deactivated 鉤子

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

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

(3) destroyed 鉤子

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

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

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

4. 實際應用場景

場景 1:頁面切換時保留滾動位置

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

場景 2:列表頁滾動加載數(shù)據(jù)

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

5. 注意事項

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

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

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

總結

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

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

相關文章

  • Vue3中createWebHistory和createWebHashHistory的區(qū)別詳析

    Vue3中createWebHistory和createWebHashHistory的區(qū)別詳析

    這篇文章主要給大家介紹了關于Vue3中createWebHistory和createWebHashHistory區(qū)別的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2023-06-06
  • 解決vue net :ERR_CONNECTION_REFUSED報錯問題

    解決vue net :ERR_CONNECTION_REFUSED報錯問題

    這篇文章主要介紹了解決vue net :ERR_CONNECTION_REFUSED報錯問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue中數(shù)據(jù)不響應的問題及解決

    vue中數(shù)據(jù)不響應的問題及解決

    這篇文章主要介紹了vue中數(shù)據(jù)不響應的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • vue項目純前端實現(xiàn)的模板打印功能示例代碼

    vue項目純前端實現(xiàn)的模板打印功能示例代碼

    在Vue項目中,通過使用vue-print-nb插件,可以實現(xiàn)頁面的打印功能,這篇文章主要介紹了vue項目純前端實現(xiàn)的模板打印功能的相關資料,需要的朋友可以參考下
    2024-10-10
  • vue中el-table樹狀表格末行合計實現(xiàn)

    vue中el-table樹狀表格末行合計實現(xiàn)

    本文主要介紹了vue中el-table樹狀表格末行合計實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-11-11
  • vue 監(jiān)聽屏幕高度的實例

    vue 監(jiān)聽屏幕高度的實例

    今天小編就為大家分享一篇vue 監(jiān)聽屏幕高度的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 關于Vue的URL轉跳與參數(shù)傳遞方式

    關于Vue的URL轉跳與參數(shù)傳遞方式

    這篇文章主要介紹了關于Vue的URL轉跳與參數(shù)傳遞方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Vue設置別名聯(lián)想路徑即@/生效的方法

    Vue設置別名聯(lián)想路徑即@/生效的方法

    這篇文章主要給大家介紹了Vue設置別名聯(lián)想路徑即@/生效的方法,文中有詳細的代碼示例和圖文講解,具有一定的參考價值,需要的朋友可以參考下
    2023-11-11
  • Vue實現(xiàn)星級評價效果實例詳解

    Vue實現(xiàn)星級評價效果實例詳解

    這篇文章主要介紹了Vue實現(xiàn)星級評價效果的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • Vue中Vue-Baidu-Map基本使用方法實例

    Vue中Vue-Baidu-Map基本使用方法實例

    最近有一個項目需要用到地圖來展示位置并進行數(shù)據(jù)交互,用vue-baidu-map實現(xiàn)出來,下面這篇文章主要給大家介紹了關于Vue中Vue-Baidu-Map基本使用的相關資料,需要的朋友可以參考下
    2023-03-03

最新評論