如何在vue中使用keepalive,以及如何移除keepalive

本文介绍了Vue的内置组件keepalive,用于组件缓存,保持组件状态。详细讲解了其基本用法,包括activated和deactivated生命周期钩子,以及include、exclude和max属性的使用。同时,结合Vue Router展示了如何配合使用,并给出了解决特定场景下动态控制组件缓存的解决方案,包括使用meta属性和Vuex进行管理。
摘要由CSDN通过智能技术生成
什么是keepalive?

在平常开发中,有部分组件没有必要多次初始化,这时,我们需要将组件进行持久化,使组件的状态维持不变,在下一次展示时,也不会进行重新初始化组件。
也就是说,keepalive 是 Vue 内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染 。也就是所谓的组件缓存

基本用法
<keep-alive>
    <component />  //你的组件
</keep-alive>

被keepalive包含的组件不会被再次初始化,也就意味着不会重走生命周期函数
但是有时候是希望我们缓存的组件可以能够再次进行渲染,这时Vue为我们解决了这个问题
被包含在 keep-alive 中创建的组件,会多出两个生命周期的钩子: activated 与 deactivated

activated 当 keepalive 包含的组件再次渲染的时候触发
deactivated 当 keepalive 包含的组件销毁的时候触发

keepalive是一个抽象的组件,缓存的组件不会被mounted,为此提供activated和deactivated钩子函数
在2.1.0 版本后keep-alive新加入了两个属性: include(包含的组件缓存生效) 与 exclude(排除的组件不缓存,优先级大于include) 。

参数理解
keepalive可以接收3个属性做为参数进行匹配对应的组件进行缓存:

  • include包含的组件(可以为字符串,数组,以及正则表达式,只有匹配的组件会被缓存)

  • exclude排除的组件(以为字符串,数组,以及正则表达式,任何匹配的组件都不会被缓存)

  • max缓存组件的最大值(类型为字符或者数字,可以控制缓存组件的个数)

注:当使用正则表达式或者数组时,一定要使用v-bind
代码示例:

<!-- 逗号分隔字符串 -->
<keep-alive include="a,b">
  <component :is="view"></component>
</keep-alive>

<!-- 正则表达式 (使用 `v-bind`) -->
<keep-alive :include="/a|b/">
  <component :is="view"></component>
</keep-alive>

<!-- 数组 (使用 `v-bind`) -->
<keep-alive :include="['a', 'b']">
  <component :is="view"></component>
</keep-alive>
// 只缓存组件name为a或者b的组件
<keep-alive include=
  • 9
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3keep-alive组件的使用Vue2相似,但是有一些细微的差异。 1. 引入keep-alive组件 在Vue3,需要在组件选项引入`KeepAlive`组件,例如: ```vue <template> <keep-alive> <router-view /> </keep-alive> </template> <script> import { KeepAlive } from 'vue' export default { components: { KeepAlive } } </script> ``` 2. 设置include和exclude 和Vue2一样,可以使用`include`和`exclude`属性来设置哪些组件需要缓存,哪些组件不需要缓存。但是在Vue3,这两个属性的值需要传递一个函数,而不是一个字符串数组。 ```vue <template> <keep-alive :include="includeComponent"> <router-view /> </keep-alive> </template> <script> import { KeepAlive } from 'vue' export default { components: { KeepAlive }, methods: { includeComponent: (component) => { // 这里可以根据组件名称等条件判断是否需要缓存 return true } } } </script> ``` 3. 使用activated和deactivated钩子 在Vue2,可以使用`activated`和`deactivated`钩子来监听keep-alive组件的激活和失活事件。在Vue3,这两个钩子被重命名为`onActivated`和`onDeactivated`。 ```vue <template> <keep-alive :include="includeComponent" @activated="onActivated" @deactivated="onDeactivated"> <router-view /> </keep-alive> </template> <script> import { KeepAlive } from 'vue' export default { components: { KeepAlive }, methods: { includeComponent: (component) => { // 这里可以根据组件名称等条件判断是否需要缓存 return true }, onActivated: (component) => { console.log('组件激活了', component) }, onDeactivated: (component) => { console.log('组件失活了', component) } } } </script> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值