最新要闻
- 国家医保局:一季度基本医疗保险基金整体运行平稳
- iPhone 15 Pro Max影像升级巨大!苹果这次硬刚安卓_动态焦点
- 观察:显卡散热疯了!背板上装风扇、热管:实测根本没用
- 买特斯拉等车更省了 上海:6月30日前购买纯电动车补贴1万
- 中国央行连续6个月增持黄金:这是啥意思? 新动态
- 当前速读:女子霸占车位拒绝挪车 业主怒将车位焊上 律师:虽有不当但不违法
- 世界最新:肃南:按下项目建设“快进键”
- 《护心》雁回人物解析 《护心》雁回是好人还是坏人_当前通讯
- 每日消息!阿汤哥开战机为英国王送祝福:你可以当我的僚机
- 淘宝发布“时光机”:可查看20年消费数据 你一共花了多少钱?
- 赔钱卖车?福特电动车业务巨亏 卖一辆车亏40万元 微头条
- 摆脱依赖美国GPS!日本计划大幅强化自家准天顶导航系统:卫星从4颗增至11颗
- 拉萨一路口红绿灯只有3秒?“飙车”才能过 已延长至15秒
- 嫁入高门的女人百度云 嫁入高门的女人-天天快资讯
- 奇瑞QQ冰淇淋的智能化驾驶 可坡道起步、动力随心
- 【环球聚看点】马斯克否认家里有矿:不是富二代而是白手起家
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
全球球精选!记录--极致舒适的Vue页面保活方案
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助
为了让页面保活更加稳定,你们是怎么做的?
我用一行配置实现了
【资料图】
Vue页面保活是指在用户离开当前页面后,可以在返回时恢复上一次浏览页面的状态。这种技术可以让用户享受更加流畅自然的浏览体验,而不会被繁琐的操作打扰。
为什么需要页面保活?
页面保活可以提高用户的体验感。例如,当用户从一个带有分页的表格页面(【页面A】)跳转到数据详情页面(【页面B】),并查看了数据之后,当用户从【页面B】返回【页面A】时,如果没有页面保活,【页面A】会重新加载并跳转到第一页,这会让用户感到非常烦恼,因为他们需要重新选择页面和数据。因此,使用页面保活技术,当用户返回【页面A】时,可以恢复之前选择的页码和数据,让用户的体验更加流畅。
如何实现页面保活?
状态存储
这个方案最为直观,原理就是在离开【页面A】之前手动将需要保活的状态存储起来。可以将状态存储到LocalStore
、SessionStore
或IndexedDB
。在【页面A】组件的onMounted
钩子中,检测是否存在此前的状态,如果存在从外部存储中将状态恢复回来。
有什么问题?
- 浪费心智(麻烦/操心)。这个方案存在的问题就是,需要在编写组件的时候就明确的知道跳转到某些页面时进行状态存储。
- 无法解决子组件状态。在页面组件中还可以做到保存页面组件的状态,但是如何保存子组件呢。不可能所有的子组件状态都在页面组件中维护,因为这样的结构并不是合理。
组件缓存
利用Vue
的内置组件
缓存包裹在其中的动态切换组件(也就是
组件)。
包裹动态组件时,会缓存不活跃的组件,而不是销毁它们。当一个组件在
中被切换时,activated
和deactivated
生命周期钩子会替换mounted
和unmounted
钩子。最关键的是,
不仅适用于被包裹组件的根节点,也适用于其子孙节点。
搭配vue-router
即可实现页面的保活,实现代码如下:
有什么问题?
- 页面保活不准确。上面的方式虽然实现了页面保活,但是并不能满足生产要求,例如:【页面A】是应用首页,【页面B】是数据列表页,【页面C】是数据详情页。用户查看数据详情的动线是:【页面A】->【页面B】->【页面C】,在这条动线中【页面B】->【页面C】的时候需要缓存【页面B】,当从【页面C】->【页面B】的时候需要从换从中恢复【页面B】。但是【页面B】->【页面A】的时候又不需要缓存【页面B】,上面的这个方法并不能做到这样的配置。
最佳实践
最理想的保活方式是,不入侵组件代码的情况下,通过简单的配置实现按需的页面保活。
【不入侵组件代码】这条即可排除第一种方式的实现,第二种【组件缓存】的方式只是败在了【按需的页面保活】。那么改造第二种方式,通过在router
的路由配置上进行按需保活的配置,再提供一种读取配置结合
的include
属性即可。
路由配置
src/router/index.ts
import useRoutersStore from "@/store/routers";const routes: RouteRecordRaw[] = [ { path: "/", name: "index", component: () => import("@/layout/index.vue"), children: [ { path: "/app", name: "App", component: () => import("@/views/app/index.vue"), }, { path: "/data-list", name: "DataList", component: () => import("@/views/data-list/index.vue"), meta: { // 离开【/data-list】前往【/data-detail】时缓存【/data-list】 leaveCaches: ["/data-detail"], } }, { path: "/data-detail", name: "DataDetail", component: () => import("@/views/data-detail/index.vue"), } ] }];router.beforeEach((to: RouteLocationNormalized, from: RouteLocationNormalized, next: NavigationGuardNext) => { const { cacheRouter } = useRoutersStore(); cacheRouter(from, to); next();});
保活组件存储
src/stroe/router.ts
import { RouteLocationNormalized } from "vue-router";const useRouterStore = defineStore("router", { state: () => ({ cacheComps: new Set(), }), actions: { cacheRouter(from: RouteLocationNormalized, to: RouteLocationNormalized) { if( Array.isArray(from.meta.leaveCaches) && from.meta.leaveCaches.inclued(to.path) && typeof from.name === "string" ) { this.cacheComps.add(form.name); } if( Array.isArray(to.meta.leaveCaches) && !to.meta.leaveCaches.inclued(from.path) && typeof to.name === "string" ) { this.cacheComps.delete(to.name); } }, }, getters: { keepAliveComps(state: State) { return [...state.cacheComps]; }, },});
页面缓存
src/layout/index.vue
<script lang="ts" setup>import { storeToRefs } from "pinia";import useRouterStore from "@/store/router";const { keepAliveComps } = storeToRefs(useRouterStore());</script>
TypeScript提升配置体验
import "vue-router";export type LeaveCaches = string[];declare module "vue-router" { interface RouteMeta { leaveCaches?: LeaveCaches; }}
该方案的问题
- 缺少通配符处理
/*
、/**/index
。 - 无法缓存
/preview/:address
这样的动态路由。 - 组件名和路由名称必须保持一致。
总结
通过
获取到当前路由对应的组件,在将该组件通过
渲染,渲染之前利用
来过滤当前组件是否需要保活。 基于上述机制,通过简单的路由配置中的meta.leaveCaches = [...]
来配置从当前路由出发到哪些路由时,需要缓存当前路由的内容。
本文转载于:
https://juejin.cn/post/7216262593718173752
如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
关键词:
全球球精选!记录--极致舒适的Vue页面保活方案
世界热头条丨云图说|图解制品仓库CodeArts Artifact
国家医保局:一季度基本医疗保险基金整体运行平稳
iPhone 15 Pro Max影像升级巨大!苹果这次硬刚安卓_动态焦点
观察:显卡散热疯了!背板上装风扇、热管:实测根本没用
买特斯拉等车更省了 上海:6月30日前购买纯电动车补贴1万
中国央行连续6个月增持黄金:这是啥意思? 新动态
当前速读:女子霸占车位拒绝挪车 业主怒将车位焊上 律师:虽有不当但不违法
世界最新:肃南:按下项目建设“快进键”
读书笔记丨理解和学习事务,让你更好地融入云原生时代
第二章-Java程序的设计环境
Python第三方库安装教程、什么是第三方库_全球消息
AI来势汹汹,这份「生存计划」请查收!|世界实时
商品日报(5月8日):商品市场情绪回暖 双焦大涨超6%豆一涨超5%
《护心》雁回人物解析 《护心》雁回是好人还是坏人_当前通讯
每日消息!阿汤哥开战机为英国王送祝福:你可以当我的僚机
淘宝发布“时光机”:可查看20年消费数据 你一共花了多少钱?
赔钱卖车?福特电动车业务巨亏 卖一辆车亏40万元 微头条
摆脱依赖美国GPS!日本计划大幅强化自家准天顶导航系统:卫星从4颗增至11颗
拉萨一路口红绿灯只有3秒?“飙车”才能过 已延长至15秒
嫁入高门的女人百度云 嫁入高门的女人-天天快资讯
昇腾实战丨DVPP媒体数据处理视频解码问题案例
记一次springboot项目漏洞挖掘 全球观速讯
微资讯!科创板收盘播报:科创50指数涨0.77% 软件股显著回暖
奇瑞QQ冰淇淋的智能化驾驶 可坡道起步、动力随心
【环球聚看点】马斯克否认家里有矿:不是富二代而是白手起家
挑战千元旗舰耳机!真我Buds Air5 Pro行业首发50dB降噪
怎么用手机更健康?专家:正常光照下建议亮度控制在50%、距离50cm 天天亮点
巴菲特将AI比作原子弹:将会改变一切
网友的iPhone 14 Pro Max烧屏!苹果售后反馈“屏幕没问题”|动态焦点
客所思s10 客所思控制面板下载s10 环球最资讯
天天观点:Linux基础18 磁盘介绍, 结构, 磁盘分区Fdisk
Marked.js让您的文档编辑更加轻松自如-环球报资讯
Kerberos协议原理 全球时讯
验证码短信 API 接入指南:Java 语言示例代码 天天新消息
Tcl/Tk教程_编程入门自学教程_菜鸟教程-免费教程分享_世界观速讯
iPhone 16 Pro将采用固态按键:还有屏下Face ID!|世界今头条
咋想的?一住户小区花园内放生蟑螂 专家:病菌宿主可传播疾病_天天通讯
即时:餐馆有机花菜无认证遭索赔500元 正当维权还是恶意索赔?
全国首例超长矸石充填开采工作面在山能鲁西矿业新巨龙公司“上线”
关于Kubernetes-v1.23.6-master节点的初始化操作|全球播报
WEB中间件常见漏洞总结 当前通讯
企业短信遭疯狂盗用,可能是没配置验证码_当前报道
[webrtc 入门系列] centos搭建coturn服务器 当前播报
欧普康视:目前OK镜没有涉及到AIGC技术_今日关注
《小美人鱼》正片片段曝光:黑小美人鱼海底一展歌喉 天天滚动
全球今日讯!漫威影史最高分电影 《银河护卫队3》票房破2亿
俞敏洪谈为什么大量孩子失去好奇心:中国填鸭式教育、老师引导等造成 每日热点
世界消息!kingbase之ksql命令工具
【Issues】axios如何获取responseType为blob的请求的错误信息 环球时讯
浙江风彩网福彩双色球走势图_浙江风彩网 环球资讯
环球微速讯:一秒充一公里!华为全液冷超充架构全球首测:小鹏发去感谢信
京东20年为员工投入福利近500亿 还建4000套员工公寓 租金仅5折
别总盯着帕萨特 新一代别克君越上市定档:20万最香行政轿车来了
电动车主自驾更省钱!支付宝出行可看电价波动 一键比价
天天视讯!手机丢了三年后被启用:摄像头拍下非洲小哥
【上海成交周报】第19周新房成交2627套,涨价房源1613套 天天精选
常见的 API 大全分享_全球观点
C#高级编程--通信协议
GPS北斗卫星时间同步系统助力电力自动化网络系统_世界看热讯
世界热资讯!螣龙安科携攻击面管理和BAS再上榜!2023网安行业全景图速看
ESXI运行虚拟机,软件包0CPU耗用高 当前热门
观天下!河南董寨为野外孵化的朱鹮幼鸟佩戴“身份证”
华硕k43s什么时候上市的?华硕k43s参数
首款天玑8020平板电脑!荣耀平板V8今日发售:1899元起
环球关注:高性能大屏轻薄本华为MateBook D 16将开售 高质价比的实力之选
0月租!中兴U50 Pro 5G随身Wi-Fi首销:1699元|全球快资讯
员工拒从北京调离被开除 获赔14万+:官方支持维权 地点调整处理不当
罗永浩直播间拍卖西湖公厕充电宝 超低起拍价58元
索尼黑卡RX100M5怎么拍延时视频?索尼黑卡RX100M5参数
amd e350相当于intel的什么CPU?amd E350支持多大内存?
高分屏是什么意思?高分屏和ips屏有什么区别?
AMD OverDrive如何使用?AMD OverDrive怎么超频?
环球热门:常青科技董秘回复: “2-乙烯基萘”为公司募投项目计划产品之一,募投项目尚在建设当中
人民出版社在哪个城市?人民出版社是什么级别?
奥特曼的生日是几月几日?奥特曼名字大全
范伟出演的电视剧都有哪些?范伟个人简介
护士帽子三条杠是什么职称?护士帽子三道杠解释
仙境传说RO H5游戏详细图文架设教程
每日信息:使用UE做动画编辑-VRAnimEditor
刘基贤为什么叫67?刘基贤个人简介
世界热议:茂名恒博贸易有限公司_关于茂名恒博贸易有限公司的简介
华为夏季全场景新品发布会官宣:5月18日见-天天快看
五一高速免费结束后下高速 男子拒付费堵了出口9小时_百事通
男子摔坏主管手机被开除 法院:公司赔偿13万余元
今日快讯:保护壳“泄露天机”:三星Galaxy Z Flip5副屏神似文件夹
小牛三款电动新车本月发!号称史上最远、最快、最能装_世界微头条
鄂尔多斯市内培外引打造龙头领航强磁场
Java开发、SpringBoot开发(狂神说Java) 每日消息
全球观焦点:在JS中如何判断两个对象是否相等
把钱叠成爱心的简单方法(怎么把钱叠成爱心简介介绍)
新一代华为MateBook D 16今日开售:顶配i9-13900H 16英寸黄金屏 重点聚焦
车机软件未达预期 曝大众汽车将解雇大部分高管 天天热推荐
天天快看:造型媲美法拉利!全新丰田皇冠Sport首发:进中国敢卖40万
视点!不少车主狂喜:开车违法 刷视频就可免于扣分罚款
不易变形:220g重磅纯棉短袖19.9元新低(原价59元)
西藏学者:寄宿制教育更应以当地人视角去理解|热议
环球短讯!武汉汉派融城投资管理有限公司_关于武汉汉派融城投资管理有限公司简述
【新要闻】高并发场景下的 HttpClient 优化,QPS 大大提升!
太惨!美国人不敢把钱存银行了 苹果的“余额宝”等受益|世界报资讯