Vue.js 的 keep-alive 组件是一个抽象组件,用于保持组件状态或避免重新渲染。主要用于保存组件的状态,避免每次切换时重新创建组件。keep-alive 包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。当组件在 <keep-alive> 内部时,组件的挂载和卸载生命周期钩子不会被调用,取而代之的是两个新的钩子函数:activated 和 deactivated。
以下是 keep-alive 的一些关键点:
-
组件缓存:
keep-alive会缓存被包裹的组件实例,当组件再次渲染时,可以快速恢复之前的状态,避免重新渲染的性能开销。 -
生命周期钩子:使用
keep-alive包裹的组件会多出两个生命周期钩子:activated和deactivated。当组件被缓存时,deactivated钩子会被调用;当缓存的组件再次激活时,activated钩子会被调用。 -
属性:
include和exclude属性允许组件根据组件的名称被缓存或不被缓存。max属性可以限制缓存的组件数量,当存储的组件数量超过max设置值时,最久未被访问的组件将会被销毁。
keep-alive 特别适用于以下场景:
- 对性能有高要求的应用,如移动端应用。
- 组件需要保持状态或避免重新渲染的场景,如表单数据保持、滚动位置保持等。
使用 keep-alive 时,需要考虑的一个重要方面是缓存管理。随着时间的推移,缓存的组件可能会占用大量内存,特别是在使用 max 属性限制缓存数量时,需要合理设置以平衡性能和资源消耗。