Notes

hook 与闭包

一句话结论:函数组件每次 render 都会创建新的闭包;如果你把旧闭包里的值“带到未来”,就会遇到 stale state/过期 props 等问题。

1. 闭包陷阱长什么样

  • Effect/回调捕获了旧 state
  • 异步回调执行时读到的是旧值,而不是最新值

2. 常见解决手段

  • 函数式更新:setState((prev) => next(prev)) 避免依赖外部闭包值
  • useRef 保存最新值:在回调里读 ref.current
  • 正确写依赖数组:让 effect 在依赖变化时重新注册

3. 面试要点

  • “闭包不是 bug,是 JS 语义”;关键在于你是否意识到 render 是重新执行函数
  • 并发渲染下更要避免“读写不一致”,必要时用 useSyncExternalStore

关联阅读

cd ..