Samgao0312 / Blog

MIT License
1 stars 1 forks source link

【再学前端】深入理解keep-alive #143

Open Samgao0312 opened 2 years ago

Samgao0312 commented 2 years ago

官方文档

是什么

keep-alive 是Vue的内置组件,能在组件切换过程中将状态保留在内存中,防止重复渲染DOM。 keep-alive 是 vue 内置的组件,用 keep-alive 包裹组件时,会 缓存 不活动的组件实例,而 不是销毁他们。 keep-alive 主要用于保存组件状态或避免重复创建 重复渲染导致的性能问题。 keep-alive 可以设置以下props属性:

特点

  1. 它是一个抽象组件, 自身不会渲染为一个 dom 元素,也不会出现在组件的父组件链中。
  2. 当组件在 keep-alive 内被切换,组件的 activated 和 deactivated 这两个生命周期钩子函数会被执行。组件一旦被 缓存, 再次渲染就不会执行 createdmounted 生命周期钩子函数。
    1. activated 当组件被激活(使用)的时候触发 可以简单理解为进入这个页面的时候触发
    2. deactivated 当组件不被使用(inactive状态)的时候触发 可以简单理解为离开这个页面的时候触发
  3. 要求同时只有一个子组件被渲染。
  4. 不会在函数式组件中正常工作,因为它们没有缓存实例。

使用场景

// 1 动态组件(所谓动态组件就是让多个组件使用同一个挂载点,并动态切换。)
<keep-alive>
    <component is="currentComponent"></component>
</keep-alive>
// 2 多个条件判断的子组件
<keep-alive>
    <comp-a v-if="true"></comp-a>
    <comp-b v-else></comp-b>
</keep-alive>
// 3 transition
<transition>
    <keep-alive>
        <component is="currentComponent"></component>
    </keep-alive>
</transition>
// 4 结合vue-router
<keep-alive>
  <router-view></router-view>
</keep-alive>

原理分析

https://vue3js.cn/interview/vue/keepalive.html#%E4%B8%89%E3%80%81%E5%8E%9F%E7%90%86%E5%88%86%E6%9E%90

参考阅读