keep-alive及其生命周期的使用

keep-alive是Vue.js中用于组件缓存的指令,防止组件状态丢失并避免重复渲染。它不生成DOM元素,可通过include、exclude属性指定缓存或排除组件,max属性限制缓存数量。在结合路由使用时,可通过meta属性控制路由组件的缓存。激活和去激活组件时,会触发activated和deactivated生命周期钩子。
摘要由CSDN通过智能技术生成

keep-alive说明

keep-alive的作用是缓存组件内部状态,避免重复渲染。

<keep-alive>标签不会渲染成一个dom元素。也不会出现在组件的父组件链中。

keep-alive的用法

keep-alive可以接收三个属性作为参数,匹配对应的组件进行缓存:
  1. include:缓存指定组件。

  1. exclude:不缓存指定组件。

  1. max:最多可以缓存几个组件。

// 只缓存组件name为a和b的组件
<keep-alive include="a,b"> 
  <component />
</keep-alive>

// 组件name为c的组件不缓存(可以保留它的状态或避免重新渲染)
<keep-alive exclude="c"> 
  <component />
</keep-alive>

// 如果同时使用include,exclude,那么exclude优先于include, 下面的例子只缓存a组件
<keep-alive include="a,b" exclude="b"> 
  <component />
</keep-alive>

// 如果缓存的组件超过了max设定的值5,那么将删除第一个缓存的组件
<keep-alive exclude="c" max="5"> 
  <component />
</keep-alive>

配合路由router使用

router-view也是一个组件,如果直接包含在keep-alive里面,那么所有路径中,符合匹配的都会被缓存。用法与缓存组件相同。

使用meta属性缓存路由
export default [
  {
    path: '/',
    name: 'home',
    component: Home,
    meta: {
      keepAlive: true // 需要被缓存
    }
  }, {
    path: '/user',
    name: 'user',
    component: User,
    meta: {
      keepAlive: false // 不需要被缓存
    }
  }
]
<keep-alive>
    <router-view v-if="$route.meta.keepAlive">
        <!-- 这里组件会被缓存,比如 Home! -->
    </router-view>
</keep-alive>

<router-view v-if="!$route.meta.keepAlive">
    <!-- 这里组件不会被缓存,比如 User! -->
</router-view>

keep-alive的生命周期

  1. 当引入keep-alive 的时候,页面第一次进入,钩子函数的触发顺序:created ➡️ mounted ➡️ activated,退出当前页面时触发deactivated。再次进入此页面时,只触发activated。

  1. 只要进入页面activated就会被触发,但是mounted不会重复触发。

  1. 如果需要每次进入页面时,都执行一些方法,可以在最外层包裹一层<keep-alive>这样每次进入页面就会执行你想执行的方法,如果只需要执行一次,那么放在mounted中,不失为一种很好的选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值