vue关于keep-alive的使用

本文探讨了在Vue项目中使用keep-alive组件来保持页面状态的方法。通过解决一个具体的问题——页面状态无法正确缓存,揭示了.vue文件内的name属性与路由配置中的name属性必须一致的重要性。

vue关于keep-alive的使用

起因:公司项目使用vue需要实现跳转页面之后再返回,保留原页面状态

技术,需要使用keep-alive

分享今天vue,跳转页面再返回时,保持原页面状态,使用keep-alive遇到的小问题:

接手别人的项目,已经定义了keep-alive,但是返回原页面还是会清除之前的状态。
各种方式都尝试过了,还是无效果,VUE创建,销毁,路由离开等方法。

随后对比开源的vue(vue-element-admin),和自己项目里面的vue,为什么都用了keep-alive,自己项目里面却没缓存到,最后发现,是.vue文件里面写的name和router里面定义的name不一致!!!(应该是之前写前端的人,不想要缓存原状态,把所有页面改了名字,其实这样还是效率不好,因为所有页面都进行缓存了,所以可以自己在router里面的meta定义一个变量,是否需要缓存,然后AppMain.vue/或自身项目对应的外层布局文件里面进行判断)

在router里面定义的路由name,需要和xx.Vue里面的name一致,即export  default {name:  "定义的名字"}   

vue-admin地址:https://panjiachen.github.io/vue-element-admin/#/
 

Vue.js 中,`keep-alive` 是一个内置的高阶组件,用于缓存组件实例,避免在组件切换时重复创建和销毁,从而提升应用性能[^2]。它不会渲染出任何 DOM 元素,也不会出现在父组件链中,而是作为一个抽象容器来管理其包裹的组件状态。 ### 基本使用方法 要使用 `keep-alive`,只需将需要缓存的组件包裹在 `<keep-alive>` 标签内即可。例如,在动态组件或路由组件中使用: ```html <keep-alive> <component :is="currentComponent" /> </keep-alive> ``` 在这个例子中,`currentComponent` 是一个动态绑定的组件名称或组件对象。当组件切换时,`keep-alive` 会缓存之前加载的组件实例,而不是销毁它们。 ### 控制缓存策略 Vue 提供了两个特殊的生命周期钩子函数,用于控制组件在被缓存时的行为: - `activated()`:当组件被激活(显示)时调用。 - `deactivated()`:当组件被停用(隐藏)时调用。 这两个钩子可以用来执行一些与组件可见性相关的操作,如数据拉取、定时器启动或清理等。 示例代码如下: ```javascript export default { name: 'CachedComponent', activated() { console.log('组件已激活'); }, deactivated() { console.log('组件已停用'); } } ``` ### 条件缓存 如果希望只缓存特定组件,可以结合 `include` 和 `exclude` 属性使用- `include`:指定哪些组件名应被缓存。 - `exclude`:指定哪些组件名不应被缓存。 这些属性接受逗号分隔的组件名字符串或正则表达式(在 Vue 3 中支持)。 ```html <keep-alive> <component :is="currentComponent" v-if="shouldRender" /> </keep-alive> <!-- 或者 --> <keep-alive include="ComponentA,ComponentB"> <component :is="currentComponent" /> </keep-alive> ``` 通过这种方式,可以灵活地控制哪些组件需要缓存,哪些不需要。 ### 注意事项 - `keep-alive` 对于仅需一次渲染且不需要频繁更新的组件特别有用。 - 使用 `keep-alive` 缓存的组件将不会触发 `created` 和 `mounted` 生命周期钩子再次执行,除非组件被销毁。 - 如果组件内部有大量数据或状态,合理利用 `activated` 和 `deactivated` 钩子进行状态管理和资源释放非常重要。 ### 总结 `keep-alive` 是一个非常实用的工具,尤其适用于需要频繁切换但又不希望每次都重新加载的场景。通过合理使用该组件,可以显著提升 Vue 应用的性能和用户体验。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值