SorryToPerson logo
返回
前端2026-04-15

React 面试题:Hooks 深入解析

总结 React Hooks 使用场景、原理、性能优化及常见面试问题。

React 面试题:Hooks 深入解析

1. Hooks 设计目标是什么?

  • 让函数组件也能使用状态和副作用。
  • 解决类组件逻辑复用困难的问题。
  • 通过组合函数实现更清晰的状态管理。

2. 为什么不能在循环或条件中调用 Hooks?

  • Hooks 依赖调用顺序。
  • 变动调用顺序会破坏内部状态映射。
  • 只能在顶层或自定义 Hook 中使用。

3. useEffect 的依赖数组如何正确填写?

  • 应该包含所有外部引用的变量。
  • 缺少依赖会导致 stale closure。
  • 过多依赖会导致重复执行。

4. useLayoutEffect 与 useEffect 有何区别?

  • useLayoutEffect 在 DOM 更新后、浏览器绘制前同步执行。
  • useEffect 异步延后执行,不阻塞绘制。
  • 只有当需要读取布局或同步 DOM 变更时使用 useLayoutEffect。

5. useRef 的用途有哪些?

  • 保存 DOM 引用。
  • 持久化可变值而不触发重渲染。
  • 用于记录前一次值或防抖定时器 ID。

6. 如何避免 Hook 依赖与性能问题?

  • 使用 useMemo 和 useCallback 缓存值与函数。
  • 避免在 render 中创建新对象。
  • 关注是否有不必要的子组件重新渲染。

7. 你如何设计可复用的自定义 Hook?

  • 封装状态逻辑和副作用。
  • 接收参数并返回状态与操作接口。
  • 保持 API 简单、职责单一。

8. Hooks 与类组件有哪些性能差异?

  • Hooks 函数组件可组合性更好。
  • 类组件的生命周期更难以复用。
  • 渲染次数与性能差异主要来自渲染逻辑本身,而非 Hooks 机制。
ReactHooks前端