请解释 Vue 中 keep-alive 的作用和内部机制,并说明它具体缓存了哪些内容?
考察说明
考察对 Vue 内置组件 keep-alive 的原理理解,包括其缓存策略和缓存对象。
回答思路
- 【回答框架 1】keep-alive 是 Vue 内置的抽象组件,用于在组件切换时保留状态,避免重复渲染。其主要作用是缓存不活跃的组件实例,而不是销毁它们,从而提升性能。
- 【回答框架 2】其实现原理是,当组件被切换时,keep-alive 会将组件实例 vnode 缓存到内存中的 cache 对象中,并根据 include/exclude 属性和 max 限制来控制缓存行为。在渲染时,如果命中了缓存,则直接使用缓存的 vnode 并更新其 key,否则创建新实例。
- 【回答框架 3】具体缓存的内容是组件实例及其对应的 vnode,包括组件的状态数据、DOM 结构和生命周期状态。这样当组件再次被激活时,可以直接复用,无需重新创建和渲染。此外,keep-alive 会触发 activated 和 deactivated 生命周期钩子,用于处理激活和停用时的逻辑。
- 【关键点 1】keep-alive 缓存组件实例和 vnode,避免重复渲染。
- 【关键点 2】它通过内存中的 cache 对象存储,并使用 include/exclude 和 max 控制缓存范围。
- 【关键点 3】被缓存组件会触发 activated 和 deactivated 生命周期钩子,而非 created/mounted。
- 【易错点 1】不要误解 keep-alive 会缓存所有组件,其默认缓存所有,但可通过 include/exclude 控制。
- 【易错点 2】注意 keep-alive 只对动态组件或路由视图有效,且缓存的是组件实例,不适用于函数式组件。