前端 & AI 面试题库
React

React Keep-Alive

React Keep-Alive 实现

核心答案

React无原生Keep-Alive,核心目标是缓存组件DOM和状态,避免卸载,仅隐藏组件。

1. 核心思路:缓存组件的Fiber节点、DOM节点及内部状态,通过"隐藏而非卸载"实现状态保留。

2. 常用方案:基础版用HOC控制display属性;工业级用react-activation库(基于Portal和缓存池);路由场景通过维护组件缓存池实现。

3. 关键点:避免组件卸载、确保状态恢复、实现缓存管理(防止内存泄漏)。

延伸追问

  • 1. Keep-Alive缓存的是组件的哪些内容?——组件的Fiber节点、DOM节点、内部state及ref等状态。

  • 2. 大量缓存组件会导致什么问题?如何解决?——会造成内存泄漏,需实现LRU等缓存淘汰策略或手动清除无用缓存。

  • 3. React 18的Concurrent Mode对Keep-Alive实现有影响吗?——有影响,需适配并发更新的Fiber架构,确保缓存状态与并发渲染兼容。

  • 4. 如何实现"按需缓存"?——按路由、组件cacheKey控制缓存启用/禁用,仅缓存必要组件。

  • 5. Keep-Alive与memo的区别?——Keep-Alive缓存组件实例(避免卸载),memo缓存组件渲染结果(避免重复渲染)。

(注:文档部分内容可能由 AI 生成)