电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

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

瀏覽:10日期: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
相關文章:
主站蜘蛛池模板: 防水接头-电缆防水接头-金属-电缆密封接头-不锈钢电缆接头 | 聚合氯化铝价格_聚合氯化铝厂家_pac絮凝剂-唐达净水官网 | 充气膜专家-气膜馆-PTFE膜结构-ETFE膜结构-商业街膜结构-奥克金鼎 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | 无负压供水设备,消防稳压供水设备-淄博创辉供水设备有限公司 | 胶辊硫化罐_胶鞋硫化罐_硫化罐厂家-山东鑫泰鑫智能装备有限公司 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 不锈钢管件(不锈钢弯头,不锈钢三通,不锈钢大小头),不锈钢法兰「厂家」-浙江志通管阀 | 美甲贴片-指甲贴片-穿戴美甲-假指甲厂家--薇丝黛拉 | 骁龙云呼电销防封号系统-axb电销平台-外呼稳定『免费试用』 | 电机铸铝配件_汽车压铸铝合金件_发动机压铸件_青岛颖圣赫机械有限公司 | 钢托盘,铁托盘,钢制托盘,镀锌托盘,饲料托盘,钢托盘制造商-南京飞天金属13260753852 | GEDORE扭力螺丝刀-GORDON防静电刷-CHEMTRONICS吸锡线-上海卓君电子有限公司 | 中央空调温控器_风机盘管温控器_智能_液晶_三速开关面板-中央空调温控器厂家 | [官网]叛逆孩子管教_戒网瘾学校_全封闭问题青少年素质教育_新起点青少年特训学校 | 工业铝型材生产厂家_铝合金型材配件批发精加工定制厂商 - 上海岐易铝业 | 数控走心机-走心机价格-双主轴走心机-宝宇百科 | 钣金加工厂家-钣金加工-佛山钣金厂-月汇好 | 锥形螺带干燥机(新型耙式干燥机)百科-常州丰能干燥工程 | 贵州水玻璃_-贵阳花溪闽兴水玻璃厂 | 微信聊天记录恢复_手机短信删除怎么恢复_通讯录恢复软件下载-快易数据恢复 | 深圳律师咨询_深圳律师事务所_华荣【免费在线法律咨询】网 | 耐热钢-耐磨钢-山东聚金合金钢铸造有限公司 | 杭州用友|用友软件|用友财务软件|用友ERP系统--杭州协友软件官网 | 北京成考网-北京成人高考网| 深圳装修_店面装修设计_餐厅设计_装修全包价格-尚泰装饰设计 | 减速机电机一体机_带电机减速器一套_德国BOSERL电动机与减速箱生产厂家 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 色谱柱-淋洗液罐-巴罗克试剂槽-巴氏吸管-5ml样品瓶-SBS液氮冻存管-上海希言科学仪器有限公司 | 泉州陶瓷pc砖_园林景观砖厂家_石英砖地铺石价格 _福建暴风石英砖 | 除尘器布袋骨架,除尘器滤袋,除尘器骨架,电磁脉冲阀膜片,卸灰阀,螺旋输送机-泊头市天润环保机械设备有限公司 | 成都亚克力制品,PVC板,双色板雕刻加工,亚克力门牌,亚克力标牌,水晶字雕刻制作-零贰捌广告 | 花纹铝板,合金铝卷板,阴极铝板-济南恒诚铝业有限公司 | 紫外线老化试验箱_uv紫外线老化试验箱价格|型号|厂家-正航仪器设备 | 周易算网-八字测算网 - 周易算网-宝宝起名取名测名字周易八字测算网 | 萃取箱-萃取槽-PVC萃取箱厂家-混合澄清槽- 杭州南方化工设备 | 磁力抛光机_磁力研磨机_磁力去毛刺机_精密五金零件抛光设备厂家-冠古科技 | 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | 进口消泡剂-道康宁消泡剂-陶氏消泡剂-大洋消泡剂 | 西门子伺服电机维修,西门子电源模块维修,西门子驱动模块维修-上海渠利 | 台式恒温摇床价格_大容量恒温摇床厂家-上海量壹科学仪器有限公司 |