作用
用于缓存组件实例,避免重复销毁和创建,保留组件状态(如表单数据、滚动位置),提升页面切换性能。
实现原理
- 缓存机制:内部维护一个缓存对象(Map),以组件
key或name为键,存储组件实例 - 实例复用:组件切换时,不执行
destroyed,而是从 DOM 移除并缓存;重新激活时直接插入 DOM - 生命周期:增加
activated(激活)和deactivated(停用)两个钩子 - LRU策略:通过
max属性限制最大缓存数,超出时淘汰最久未使用的实例
刷新方式
- 自然更新:组件内部响应式数据变化会自动更新
- 激活钩子:
activated()中重新获取数据 - 改变key:修改组件
key强制销毁重建 - include/exclude:动态修改 include/exclude 名单
- 路由参数:利用
$route.params变化触发 watch 或beforeRouteUpdate
常用配置
<!-- 只缓存指定组件,最多10个 -->
<keep-alive :include="['User','Post']" :max="10">
<router-view />
</keep-alive>
核心思想:用内存换性能,适合多页面切换且状态需保留的场景。