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

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

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

瀏覽:12日期: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久久,三上悠亚国产精品一区二区三区
久久狠狠久久| 狠狠久久婷婷| 偷拍亚洲精品| 日韩一二三区在线观看| 国产亚洲字幕| 91日韩在线| 国产综合视频| 免费在线欧美视频| 国产亚洲一卡2卡3卡4卡新区| 国产欧美自拍| 精品五月天堂| 久久天堂成人| 亚洲一区二区三区四区五区午夜| 香蕉成人久久| 蜜桃av一区二区| 国产精品亚洲产品| 欧美国产偷国产精品三区| 亚洲一级影院| 91福利精品在线观看| 国产精品国产三级国产在线观看| www成人在线视频| 日本欧洲一区二区| 久久av国产紧身裤| 激情自拍一区| 午夜日韩影院| 鲁鲁在线中文| 亚洲在线免费| 精品国产乱码| 蜜桃视频一区二区三区在线观看 | 亚洲精品免费观看| 国产精品分类| 久久美女性网| 欧美一区影院| 久久久五月天| 久久国产视频网| 久久九九99| 欧美伊人影院| 欧美午夜精彩| 国产精品**亚洲精品| 欧美日韩国产一区精品一区| 国产福利资源一区| 在线视频观看日韩| 欧美亚洲自偷自偷| 激情亚洲影院在线观看| 日本成人中文字幕在线视频| 亚洲不卡av不卡一区二区| 国产欧美88| 久久国产88| 黑森林国产精品av| 91精品国产一区二区在线观看| 久久久影院免费| 欧美黑人巨大videos精品| 日韩中文字幕麻豆| 婷婷成人在线| 精品视频网站| 久久国产欧美日韩精品| 欧美1区免费| 国产伊人久久| 日韩超碰人人爽人人做人人添| 日韩中文影院| 国产精品v亚洲精品v日韩精品| 欧美日韩日本国产亚洲在线| 麻豆一区二区在线| 日韩综合一区二区| 欧美日韩国产免费观看视频| 国产成人精品三级高清久久91 | 亚洲一区久久| 亚洲伦乱视频| 韩日一区二区| 国产精成人品2018| 色8久久久久| 午夜宅男久久久| 久久精品99久久无色码中文字幕| 国产精品亚洲四区在线观看| 亚洲精品系列| 天堂va蜜桃一区二区三区| 亚洲电影在线| 日本а中文在线天堂| 久久99免费视频| 日韩动漫一区| 日韩一区二区三区高清在线观看| 亚洲欧美日韩国产| 91九色精品| 欧美特黄一级大片| 香蕉视频亚洲一级| 高清精品久久| 精品久久美女| 国产成人精品福利| 高清一区二区| 天堂а√在线最新版中文在线| 国产精品乱战久久久| 久久狠狠久久| 麻豆精品久久久| 国产一区丝袜| 国产精品不卡| 日韩不卡免费高清视频| 福利一区视频| 欧美韩日一区| 亚洲人成在线网站| 快播电影网址老女人久久| 国产精品99视频| 中文字幕在线视频网站| 中文字幕在线看片| 丝袜av一区| 亚洲精品电影| 水野朝阳av一区二区三区| 日韩中文字幕麻豆| 欧美亚洲综合视频| 老鸭窝一区二区久久精品| 精品视频91| 日韩综合精品| 亚洲一区二区三区四区五区午夜| 男人的天堂久久精品| 日韩激情一二三区| 欧美激情三区| 麻豆mv在线观看| 红桃视频国产精品| 日韩精品一区二区三区中文| 国际精品欧美精品| 极品日韩av| 婷婷视频一区二区三区| 国产探花一区| 日本а中文在线天堂| av不卡在线| 青草综合视频| 高清在线一区| 亚洲欧洲一区| 青青国产精品| 韩国精品主播一区二区在线观看| 午夜精品一区二区三区国产| 亚洲无线观看| 国产三级一区| 日韩欧美精品| 亚洲精品综合| 精品国产一区二| 亚洲免费影院| 国产精品伦一区二区| 亚洲成人二区| 欧美片第1页综合| 捆绑调教日本一区二区三区| 爽爽淫人综合网网站| 久久精品国产99国产| 黄色成人91| 麻豆一区二区在线| 一区二区亚洲精品| 欧美亚洲一区二区三区| 成人日韩精品| 奇米亚洲欧美| 国产综合精品| 麻豆国产精品视频| 久久福利影视| 日韩欧美一区二区三区免费看| 亚洲一区二区小说| 中文字幕在线高清| 欧美日本不卡| 亚洲欧美日韩在线观看a三区| 精品一区二区三区亚洲| 国产精品日韩久久久| 福利一区二区免费视频 | 视频一区在线播放| 国产成人在线中文字幕| 亚洲精品乱码| 国内精品福利| 成人亚洲精品| 欧美日韩黄网站| 夜夜嗨一区二区| 国产精品99一区二区三区| 日韩精彩视频在线观看| 日韩一区二区免费看| 久久一区精品| 日韩av网站免费在线| 亚洲一本视频| 中文字幕在线看片| 国产精品主播| 男女性色大片免费观看一区二区 | 国产综合婷婷| 欧美激情另类| 国产精品夜夜夜| 天堂va欧美ⅴa亚洲va一国产| 亚洲免费激情| 久久精品亚洲人成影院| 精品中国亚洲| 国产精品久久久亚洲一区| 蜜臀av在线播放一区二区三区| 日韩欧美午夜| 国产一区丝袜| 精品三级在线观看视频| 欧美日韩午夜| 97精品一区二区| 国产精品tv| 国产精品宾馆| 国产情侣久久| 日韩激情网站| 日本不卡一区二区| 亚洲va久久久噜噜噜久久| 伊人久久婷婷| 怡红院精品视频在线观看极品| 99久久九九| 久久久天天操| 99久久精品费精品国产|