当前位置:首页 > 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 属性可以限制缓存的组件实例数量,超出时会销毁最久未访问的实例:

vue keep alive实现

<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 常用于缓存路由组件:

vue 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 数组记录访问顺序:

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

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

标签: vuekeep
分享给朋友:

相关文章

vue实现单页面

vue实现单页面

Vue 实现单页面应用(SPA) Vue.js 是一个渐进式框架,非常适合构建单页面应用(SPA)。SPA 的核心特点是整个应用只有一个 HTML 页面,通过动态加载内容实现页面切换,无需重新加载整个…

vue弹幕实现不重叠

vue弹幕实现不重叠

实现 Vue 弹幕不重叠的方法 CSS 定位与动画控制 通过绝对定位和动态计算弹幕轨道高度,确保弹幕在不同轨道上运行。每条弹幕占据固定高度的轨道,避免重叠。 // 弹幕轨道高度计算 const t…

vue的艾特功能实现

vue的艾特功能实现

Vue 的 @ 功能实现 在 Vue 中实现类似社交平台的 @ 功能,通常涉及输入框的监听、用户匹配和选择插入。以下是具体实现方法: 监听输入框内容 使用 v-model 绑定输入框内容,并通过 @…

vue实现付款

vue实现付款

Vue 实现付款功能 在 Vue 中实现付款功能通常需要集成第三方支付网关(如支付宝、微信支付、Stripe 等)。以下是常见的实现方法: 集成支付宝/微信支付 安装必要的依赖(如 axios 用…

vue全选实现

vue全选实现

Vue 全选实现方法 在 Vue 中实现全选功能通常涉及数据绑定和事件处理。以下是几种常见的实现方式: 基础实现方式 <template> <div> <i…

vue实现图册

vue实现图册

Vue实现图册功能 在Vue中实现图册功能通常涉及图片展示、切换、缩放等交互效果。以下是常见的实现方法和关键代码示例: 基础图册组件结构 使用Vue单文件组件构建基础结构: <templ…