KeepAlive 是 vue 中的内置组件,当多个组件动态切换时可以对实例状态进行缓存,用法如下
router-view 中定义了一个信号槽,来渲染跳转后的组件,将keep-alive 标签封装在 组件的外面,即可实现路由跳转组件的缓存效果
下图有两个组件 页面1 和 页面2,组件页面切换 通过 点击按钮 实现

页面1 是一个计数器,加一减一,默认初始值为 0;点击按钮 页面2 ,会跳转一个 含有输入框的页面,输入框默认为空;
正常情况下,组件切换都会将组件置为初始化状态,不会缓存历史数据;如当页面1 中通过触发 增加、减少按钮将当前值置为 5 后,当切换到页面2 再切换至 页面1 ,当前值会被重置为0,原有历史数据并没有被缓存下来
而 keepAlive 可以在切换时将组件内的原有状态数据进行缓存;使用时只需要将需要缓存的组件外面包裹一层 标签即可,如下:
页面1
页面2
Page1 组件
当前值为{{ pageName }}
增加
减少
Page2 组件
输入值
页面 Page1 和 页面 Page2 组件的外层都加了一层 标签,这样无论从页面1切换到 2 还是2 切换到1 ,两个组件内的数据状态都会得到缓存,不需要重新加载

KeepAlive 默认缓存标签内所有组件,提供 include 和 exclude 属性可以实现条件缓存,支持逗号分隔、正则表达式,或者类型数组等三种形式
具体用法如下:
上面属性内容匹配的都是组件 的 name option ,当组件需要被 keepAlive 条件缓存时,都需要指定 组件的 name
vue2 中 单文件 组件 指定 name 方式如下
vue3 中 单文件 组件 name 指定,自 3.2.34 以后版本自动将 文件的文件名指定为 name,移除了手动声明方式
中 通过指定 max 属性来限制组件实例的最大缓存次数,当缓存实例次数达到max 值,则将最少访问 实例 销毁 为新示例创建预留空间
被 KeepAlive 缓存的组件实例,当组件挂载或销毁时会分别触发 activated() 和 deactivated()钩子 函数,而不是 unmounted() 和 mounted()
如果要在实例挂载或销毁时做一些操作,可以把相关逻辑写入两个钩子函数里:
https://vuejs.org/guide/built-ins/keep-alive.html#basic-usage