当前位置:网站首页>keep-alive动态移除缓存
keep-alive动态移除缓存
2022-08-06 20:05:00 【八分钟de温暖】
一、keep-alive 原理
keep-alive用于保存组件的渲染状态
步骤:
第一步:获取keep-alive包裹着的第一个子组件对象及其组件名;
第二步:根据设定的黑白名单(如果有)进行条件匹配,决定是否缓存。不匹配,直接返回组件实例(VNode),否则执行第三步;
第三步:根据组件ID和tag生成缓存Key,并在缓存对象中查找是否已缓存过该组件实例。如果存在,直接取出缓存值并更新该key在this.keys中的位置
(更新key的位置是实现LRU置换策略的关键),否则执行第四步;第四步:在this.cache对象中存储该组件实例并保存key值,之后检查缓存的实例数量是否超过max设置值,超过则根据LRU置换策略删除最近最久未使用的实例(即是下标为0的那个key);
第五步:最后并且很重要,将该组件实例的keepAlive属性值设置为true。
二、router-view key
1. 不设置 router-view 的 key 属性
由于 Vue 会复用相同组件, 即 /page/1 => /page/2 或者 /page?id=1 => /page?id=2 这类链接跳转时, 将不在执行created, mounted之类的钩子, 这时候你需要在路由组件中, 添加beforeRouteUpdate钩子来执行相关方法拉去数据
相关钩子加载顺序为: beforeRouteUpdate
2. 设置 router-view 的 key 属性值为 $route.path
从/page/1 => /page/2, 由于这两个路由的$route.path并不一样, 所以组件被强制不复用, 相关钩子加载顺序为:
beforeRouteUpdate => created => mounted
从/page?id=1 => /page?id=2, 由于这两个路由的$route.path一样, 所以和没设置 key 属性一样, 会复用组件, 相关钩子加载顺序为:
beforeRouteUpdate
3. 设置 router-view 的 key 属性值为 $route.fullPath
从/page/1 => /page/2, 由于这两个路由的$route.fullPath并不一样, 所以组件被强制不复用, 相关钩子加载顺序为:
beforeRouteUpdate => created => mounted
从/page?id=1 => /page?id=2, 由于这两个路由的$route.fullPath并不一样, 所以组件被强制不复用, 相关钩子加载顺序为:
beforeRouteUpdate => created => mounted
三、keep-alive 动态移除缓存
边栏推荐
- 如何给WordPress博客网站换个漂亮的字体
- Eye Tracking for Everyone 译文版
- 标准C语言学习总结13
- 版本控制的含义,工具,分类以及区别
- 互联网基石:TCP/IP 四层模型,由浅入深直击原理!
- 机器学习之聚类——DBSCAN演绎组织的形成
- R语言时间序列数据的平滑:使用KernSmooth包的dpill函数和locpoly函数对时间序列数据进行平滑以消除噪声、使用dpill函数筛选合适的带宽值(bandwidth)
- R语言ggplot2可视化:使用ggpubr包的ggpie函数可视化饼图(pie chart)、为饼图不同区域添加标签、palette参数自定义不同区域的填充色
- R语言使用oneway.test函数执行单因素方差分析(One-Way ANOVA)、使用aov函数执行单因素方差分析(aov函数默认组间方差相同)
- Pytest学习-读取YAML文件
猜你喜欢
随机推荐
进程理论和实操
UniPro升级甘特图 推进项目进度可视化
R语言时间序列数据的平滑:使用KernSmooth包的dpill函数和locpoly函数对时间序列数据进行平滑以消除噪声、使用dpill函数筛选合适的带宽值(bandwidth)
顶象首期业务安全月报
【23考研】408代码题参考模板——二叉树
UNet语义分割网络
【问题篇】win11突然连不上网而且很多地方点击无效
纪念一下成果
如果要存 IP 地址,用什么数据类型比较好?
【无标题】BOOT SERVICES函数实现原型:
node的express和微信小程序实现即时通讯聊天
HBuilderx快捷键
go基础之串联处理器函数
ceph-ansible5.0部署文档
JDY-16 蓝牙4.2模块串口测试方法
解决Google AdSense导致网站加载慢的优化方法
【zeno】zeno如何为自定义节点添加功能(apply函数和ZENDEFNODE初探)
ansible——playbook剧本概念及示例
C#开发mvvm模式和mvc的区别
CI/CD持续集成/持续部署








