一句话总结
React 是前端面试的核心框架,核心考点:Hooks(useState/useEffect/useMemo/useCallback 规则和时机)、虚拟DOM与Diff(同层比较+key作用)、状态管理(Context/Redux/Zustand 选型)、性能优化(memo/lazy/虚拟列表)。
React Hooks
Q:常用Hooks有哪些?useEffect的执行时机?
useState:状态管理,返回[state, setState]。
useEffect:副作用处理。组件挂载后、更新后、卸载前执行。依赖数组为空时只在挂载时执行一次。
useCallback/useMemo:性能优化,缓存函数/计算结果。
useRef:获取DOM引用或保存可变值(不触发重渲染)。
虚拟DOM与Diff
Q:虚拟DOM的原理和Diff算法?
虚拟DOM是用JavaScript对象描述真实DOM的树形结构。状态变化时先在虚拟DOM上计算差异(Diff),再批量更新真实DOM。
Diff算法策略:
1. 树级别:只比较同一层级的节点
2. 组件级别:同类型组件继续比较,不同类型直接替换
3. 元素级别:通过key标识节点,减少不必要的移动
key的作用:帮助Diff算法识别节点身份,使用index作为key在列表增删时会导致性能问题和状态错乱。
状态管理
Q:React状态管理方案有哪些?
1. Context + useReducer:React内置方案,适合中小型应用。
2. Redux:单一数据源、纯函数Reducer、中间件生态丰富。适合大型应用。
3. Zustand:轻量级状态管理,API简洁,基于Hooks。
4. Jotai/Recoil:原子化状态管理,细粒度更新。
选择原则:项目规模和团队熟悉度,避免过度设计。
性能优化
Q:React性能优化有哪些手段?
渲染优化:React.memo、useMemo、useCallback避免不必要的重渲染。
代码分割:React.lazy + Suspense实现路由级别懒加载。
虚拟列表:react-window/react-virtualized处理大数据列表。
其他:合理使用key、避免内联函数、使用Production构建、图片懒加载。