Vue3的keep-alive

449 阅读1分钟

keep-alive

keep-alive 是V3的内置组件,当我们不希望组件被重新渲染的时候,出于性能的考虑,这时候就使用keep-alive来提高性能,他可以将组件内容缓存下来,不会让他重复渲染,造成性能损耗

定义两个组件,当A组件里面的input输入值的时候,切换到B组件进行一些操作,返回A组件时,此时页面又开始重新加载

  <button @click="flag = !flag">切换组件</button>
    <A v-if="flag"></A>
    <B v-else></B>

const flag = ref<boolean>(true)

这时候利用keep-alive,将我们A组件数据自动缓存起来,当执行B组件的一系列操作时,返回A组件,数据依然存在,增加用户体验

    <keep-alive>
      <A v-if="flag"></A>
      <B v-else></B>
    </keep-alive>

include

include缓存组件的名称,支持字符串,正则,数组;当我们只想缓存A组件,定义:include="['A']"即可,需要注意的是需要在子组件定义name属性

<keep-alive :include="['A']">
      <A v-if="flag"></A>
      <B v-else></B>
    </keep-alive>

exclude

exclude不缓存组件,不想缓存那个组件就定义那个,需要注意的是需要在子组件定义name属性

   <KeepAlive :exclude="['A']">
      <A v-if="flag"></A>
      <B v-else></B>
    </KeepAlive>

max

max通过传入的max数量来限制可被缓存的最大组件实列数

   <KeepAlive :max="10">
      <A v-if="flag"></A>
      <B v-else></B>
    </KeepAlive>

增加两个生命周期

定义keepAlive后会新增onDeactivatedonActivated两个生命周期

执行顺序

    graph TD
    onMounted --> onActivated --> onDeactivated --> onUnmounted

    初始化 --> keep-alive初始化 --> keep-alive卸载 --> 卸载