日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

vue緩存之keep-alive的理解和應用詳解

瀏覽:16日期:2022-11-06 18:00:07

官方解釋:

<keep-alive> 包裹動態組件時,會緩存不活動的組件實例,而不是銷毀它們。和 <transition> 相似,<keep-alive> 是一個抽象組件:它自身不會渲染一個 DOM 元素,也不會出現在組件的父組件鏈中。

當組件在 <keep-alive> 內被切換,它的 activated 和 deactivated 這兩個生命周期鉤子函數將會被對應執行。

主要用于保留組件狀態或避免重新渲染。

keep-alive 是 Vue 的內置組件,在組件切換過程中將狀態保留在內存中,等再次訪問的時候,還保持著離開之前的所有狀態,而不是重新初始化。也就是所謂的組件緩存。

我們知道,使用路由vue-router切換組件的時候是不保存狀態的,它進行router.push()或router.push()或router.replace()的時候,舊組件會被銷毀,新組件會被新建,然后走一遍完整的生命周期。所以緩存經常與router-view一起出現:

<keep-alive> <router-view /> <!-- 所有路徑匹配到的視圖組件都會被緩存 --></keep-alive>

被包含在 keep-alive 中創建的組件,會多出兩個生命周期的鉤子: activated 與 deactivated:

1. activated:在 keep-alive 組件激活時調用2. deactivated:在 keep-alive 組件停用時調用

注意: 只有組件被 keep-alive 包裹時,這兩個生命周期函數才會被調用。這兩個鉤子在服務器端渲染期間不被調用。

應用場景:

官網有一個多標簽界面的例子,介紹的還是蠻詳細的。

我們在實際開發項目中會有一些需求,比如跳轉到詳情頁面時,需要保持列表頁的滾動條的位置,返回的時候依然在這個位置,這樣可以提高用戶體驗,這個時候就可以使用緩存組件 keep-alive 來解決。

設置了 keep-alive 緩存的組件,會多出兩個生命周期鉤子:

首次進入組件時:beforeRouteEnter > beforeCreate > created > mounted > activated > ... ... > beforeRouteLeave > deactivated 再次進入組件時:beforeRouteEnter > activated > ... ... > beforeRouteLeave > deactivated

可以看到,緩存的組件中 activated 鉤子函數每次都會觸發,所以可以通過這個鉤子判斷,當前組件時需要使用緩存的數據還是重新調用接口加載數據。如果未使用keep-alive 組件,則在頁面回退時會重新渲染頁面,首次進入組件的一系列生命周期也會一一被觸發。

離開組件時,使用了 keep-alive 不會調用 beforeDestroy 和 destroyed 鉤子,因為組件沒被銷毀,被緩存起來了。所以 deactivated 這個鉤子可以看作是 beforeDestroy 和 destroyed 的代替,緩存組件銷毀的時候要做的一些操作可以放在這個里面。

需求案例

最近項目中碰到需要緩存的場景,主要還是列表頁到詳情頁的跳轉,但列表頁存在多級關系,具體需求如下:

vue緩存之keep-alive的理解和應用詳解

初次進入此頁面,默認展示左側的樹形結構菜單,點擊某一菜單,右側加載該菜單相應的數據列表,由列表進入詳情內頁,然后再返回該頁面,希望該頁面保留了用戶之前選擇的樹形菜單及數據列表。若從其他頁面進入此頁面,則不需要緩存。

案例實踐

思路:結合 router 中設置 meta 信息,緩存列表頁。1. 設置路由的 meta 信息

const List = () => import(/* webpackChunkName: 'list' */ ’../pages/List.vue’)const Detail = () => import(/* webpackChunkName: 'detail' */ ’../pages/Detail.vue’){ path: ’list’, name: ’list’, component: List, meta: { title: ’列表’, keepAlive: true, //需要緩存 isKeep: false }},{ path: ’dist’, name: ’detail’, component: Detail}

2. 修改渲染匹配視圖組件 router-view(一般是 app.vue 文件,根據實際需求會不一樣)

<div class='container'> <keep-alive> <!-- 需要緩存的視圖組件 --> <router-view v-if='$route.meta.keepAlive'></router-view> </keep-alive> <!-- 不需要緩存的視圖組件 --> <router-view v-if='!$route.meta.keepAlive'></router-view></div>

也可以使用 keep-alive 組件的 include/exclude 屬性,include 表示要緩存的組件名(定義時的 name 屬性),而 exclude 相反,匹配到的組件不會被緩存。

<div class='container'> <keep-alive include='list'> <router-view></router-view> </keep-alive></div>

3. 在需要緩存的頁面中,通過導航守衛 beforeRouteEnter 和 activated 鉤子判斷使用緩存還是重新渲染

beforeRouteEnter (to, from, next) { // 只在詳情返回時做緩存 if (from.name === ’detail’) { to.meta.isKeep = true } else { to.meta.isKeep = false } next()},activated () { if(this.$route.meta.isKeep) { // 詳情返回,取緩存數據 } else { // 重新渲染,在這里調用加載請求 }}

此處 beforeRouteEnter 鉤子也可以使用 watch 屬性監聽路由的變化:

watch: { $route(to, from) { //通過to/from.path判斷是否是需要緩存的路徑然后添加邏輯 }}

問題:

從詳情返回列表時正常,但當用戶在詳情頁按 F5 刷新之后,再返回列表就不能保留離開之前的狀態了,因為這時頁面重載了。

解決辦法:

在離開當前之前,將信息儲存在 localStorage 中,當詳情數據刷新后,手動觸發加載請求。

到此這篇關于vue緩存之keep-alive的理解和應用詳解的文章就介紹到這了,更多相關vue keep-alive內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
999久久久91| 欧美黑人巨大videos精品| 日本久久精品| 日韩和的一区二在线| 亚洲欧美日韩高清在线| 日av在线不卡| 国产乱码精品| 久久婷婷av| 蜜桃久久精品一区二区| 国产精品99久久久久久董美香| 日韩大片在线播放| 免费高清在线一区| 免费亚洲一区| 欧美日韩一二三四| 亚洲专区视频| 成人午夜毛片| 伊人久久婷婷| 国产欧美自拍一区| 久久国产欧美| 欧美另类中文字幕| 蜜桃精品在线| 日韩不卡免费视频| 日韩av免费| 91精品日本| 免费毛片在线不卡| 国产精品久久国产愉拍| 香蕉人人精品| 国产精品久久久久久久久久齐齐| 国产综合精品一区| 国产精品极品| 欧美中文字幕| 亚洲国产欧美日本视频| 亚洲欧美在线综合| 色黄视频在线观看| 日韩av午夜在线观看| 国产一区日韩一区| 久久av电影| 日韩在线播放一区二区| av免费不卡国产观看| 最新亚洲国产| 欧美亚洲激情| 老司机精品视频网| 日韩中文字幕区一区有砖一区| 水蜜桃精品av一区二区| 婷婷精品久久久久久久久久不卡| 中文字幕人成乱码在线观看 | 亚洲国产欧美日本视频| 亚洲欧美在线专区| 欧美日韩在线播放视频| 国产福利一区二区三区在线播放| 99亚洲视频| 中国字幕a在线看韩国电影| 日韩国产在线一| 亚洲性色视频| 国产拍在线视频| 欧美精品二区| 亚洲1区在线观看| 婷婷六月综合| 日韩欧美在线中字| 国产精品99精品一区二区三区∴ | 久久国产小视频| 精品国产网站| 国产精品一区二区三区四区在线观看 | 久久香蕉精品香蕉| 一区二区国产在线| 亚洲手机在线| 国产传媒在线观看| 国产精品宾馆| 日韩精品亚洲专区| 一区免费在线| 久久久久网站| 神马久久午夜| 久久久久久自在自线| 久久这里只有| 国产精品一区高清| 日韩av不卡一区二区| 国产亚洲精品久久久久婷婷瑜伽| se01亚洲视频 | 在线一区欧美| 在线日韩欧美| 精品亚洲美女网站| 日韩欧美午夜| 天堂中文av在线资源库| 精品国产18久久久久久二百| 欧美天堂一区二区| 日韩在线观看中文字幕| 一区二区电影| 亚洲综合小说| 亚洲影视一区二区三区| 免费看欧美美女黄的网站| 视频在线观看一区| 免费在线视频一区| 亚洲激情婷婷| 夜夜嗨av一区二区三区网站四季av| 久久激情婷婷| 亚洲精品极品少妇16p| 久久精品一区二区不卡| 久久精品官网| 亚洲精品午夜av福利久久蜜桃| 99久久久久国产精品| 久久精品99久久无色码中文字幕| 日本精品影院| 久久久精品日韩| 午夜精品免费| 玖玖玖国产精品| 日韩综合一区二区| 国产丝袜一区| 国产精品115| 精品久久免费| 美女一区网站| 日韩视频精品在线观看| 丝袜脚交一区二区| 亚洲精品在线a| 国产图片一区| 国产在线日韩精品| 日韩欧美网址| 伊人影院久久| 日韩精品一区二区三区免费视频 | 国产免费播放一区二区| 国产精品久久久免费| 日韩av专区| 欧美亚洲国产一区| 视频一区免费在线观看| 亚州av日韩av| 久久免费福利| 今天的高清视频免费播放成人| 丝袜美腿亚洲色图| 国产精品资源| 日韩国产综合| 国产一区白浆| 日本三级亚洲精品| 久久久久久夜| 亚洲欧美日韩一区在线观看| 蜜乳av另类精品一区二区| 国产精品97| 黄色欧美日韩| 亚洲九九精品| 国产欧美一区二区色老头| 久久99影视| 日韩精品91| 亚洲精品电影| 亚洲精品少妇| 国产精品一卡| 91中文字幕精品永久在线| 国产亚洲一区二区手机在线观看 | 91日韩欧美| 久久久久久久欧美精品| 欧美日韩一区二区三区不卡视频 | 国产欧美日韩精品高清二区综合区| 国产欧美一区二区三区精品观看 | 欧美 日韩 国产一区二区在线视频| 欧美色图一区| 综合一区二区三区| 国产精品免费大片| 国产成人精品一区二区三区免费| 91精品韩国| 丝袜诱惑制服诱惑色一区在线观看| 午夜亚洲福利| 久久99影视| 99精品视频在线| 亚洲无线观看| 麻豆一区二区在线| 久久九九精品| 亚洲精选91| 国产精品久久久久久久久久妞妞| 国产suv精品一区二区四区视频| 久久久久久久久久久妇女| 91久久视频| 欧美精品影院| 久久国产中文字幕| 日韩中文字幕在线一区| 精品午夜久久| 最新日韩欧美| 欧美激情三区| 亚洲天堂久久| 国产欧美成人| 欧美精品自拍| 欧美激情在线精品一区二区三区| 91精品综合| 日韩精品视频中文字幕| 九九九精品视频| 日韩欧美中文在线观看| 国产精选一区| 亚洲性视频在线| 亚洲大全视频| 中文字幕成在线观看| 国产精品尤物| 亚洲精品一二| 亚洲视频播放| 久久精品亚洲人成影院| 精品一区视频| 在线看片日韩| 午夜欧美视频| 日韩久久精品| 国产探花在线精品| 免费日本视频一区| 欧美va亚洲va日韩∨a综合色| 卡一卡二国产精品| 日韩av中文字幕一区二区| 久久蜜桃精品|