当前位置:首页 > VUE

vue keep alive实现

2026-01-15 23:34:04VUE

vue keep-alive 的实现方式

在 Vue 中,keep-alive 是一个内置组件,用于缓存动态组件或组件的状态,避免重复渲染。以下是其核心实现方法:

基本用法

<keep-alive>
  <component :is="currentComponent"></component>
</keep-alive>

keep-alive 会缓存包裹的组件实例,当切换组件时,不会触发组件的销毁和重新创建。

包含与排除特定组件

通过 includeexclude 属性可以指定需要缓存或排除缓存的组件:

<keep-alive :include="['ComponentA', 'ComponentB']" :exclude="['ComponentC']">
  <component :is="currentComponent"></component>
</keep-alive>
  • include:只有名称匹配的组件会被缓存(支持字符串、正则或数组)。
  • exclude:名称匹配的组件不会被缓存。

最大缓存实例数

通过 max 属性可以限制缓存的组件实例数量,超出时会销毁最久未访问的实例:

<keep-alive :max="5">
  <component :is="currentComponent"></component>
</keep-alive>

生命周期钩子

被缓存的组件会触发特定的生命周期钩子:

  • activated:组件被激活时调用(从缓存中恢复)。
  • deactivated:组件被停用时调用(进入缓存)。
export default {
  activated() {
    console.log('组件被激活');
  },
  deactivated() {
    console.log('组件被停用');
  }
};

自定义 key 控制缓存

默认情况下,keep-alive 根据组件的 name 选项进行缓存。可以通过 key 属性自定义缓存标识:

<keep-alive>
  <router-view :key="$route.fullPath"></router-view>
</keep-alive>

与 Vue Router 结合使用

keep-alive 常用于缓存路由组件:

<keep-alive>
  <router-view></router-view>
</keep-alive>

通过路由的 meta 字段可以更灵活地控制缓存:

{
  path: '/foo',
  component: Foo,
  meta: { keepAlive: true }
}
<keep-alive>
  <router-view v-if="$route.meta.keepAlive"></router-view>
</keep-alive>
<router-view v-if="!$route.meta.keepAlive"></router-view>

实现原理

keep-alive 的核心原理是通过 Vue 的虚拟 DOM 缓存机制:

  1. 在渲染阶段,keep-alive 会检查缓存中是否存在目标组件。
  2. 如果存在,直接返回缓存的实例;否则创建新实例并缓存。
  3. 使用 LRU(最近最少使用)算法管理缓存数量(当 max 被设置时)。

其内部通过 cache 对象存储组件实例,并通过 keys 数组记录访问顺序:

vue keep alive实现

const cache = Object.create(null);
const keys = [];

当组件切换时,keep-alive 会调用 pruneCacheEntry 方法清理超出缓存的实例。

标签: vuekeep
分享给朋友:

相关文章

vue实现socket

vue实现socket

Vue 中实现 WebSocket 通信 在 Vue 项目中实现 WebSocket 通信可以通过原生 WebSocket API 或第三方库(如 socket.io-client)完成。以下是两种常…

实现.vue文件

实现.vue文件

创建.vue文件的基本结构 一个标准的.vue文件包含三个部分:模板(template)、脚本(script)和样式(style)。这种结构允许开发者在一个文件中管理组件的HTML、JavaScrip…

vue实现海报

vue实现海报

Vue 实现海报生成方案 使用 html2canvas 库 html2canvas 是一个将 HTML 元素转换为 Canvas 的库,适合将 Vue 组件渲染为海报图片 安装依赖: npm in…

vue 实现 confirm

vue 实现 confirm

实现确认对话框的方法 在Vue中实现确认对话框可以通过多种方式完成,包括使用内置组件、第三方库或自定义组件。 使用浏览器原生confirm 最简单的实现方式是直接调用浏览器原生的confirm方法。…

vue实现气泡

vue实现气泡

Vue 实现气泡效果的方法 在 Vue 中实现气泡效果可以通过 CSS 动画、第三方库或自定义组件完成。以下是几种常见实现方式: 使用纯 CSS 和 Vue 过渡 通过 Vue 的过渡系统结合 CS…

vue实现绘图

vue实现绘图

Vue 实现绘图的方法 在 Vue 中实现绘图功能,可以通过多种方式实现,包括使用原生 HTML5 Canvas、第三方库(如 Fabric.js、Konva.js)或 SVG。以下是几种常见的实现方…