React Hooks 为什么会出现闭包陷阱,应该如何识别和修复?
简答题中等814 次浏览
参考答案与解析
核心结论:所谓 Hooks 闭包陷阱,本质上不是闭包失效,而是函数组件每次渲染都会创建一套新的局部变量和回调;某次渲染创建的异步回调、定时器或事件监听器会继续引用当次渲染的状态快照。如果副作用没有随依赖变化而重新建立,回调读取到的就是旧值。
底层机制上,调用状态更新函数会请求新的渲染。新渲染中的状态变量与旧渲染中的变量不是同一个可变容器,而是该次渲染的快照。假设只在挂载时通过 useEffect 注册定时器,定时器回调便捕获了首次渲染的值;后续状态虽发生变化,旧回调的词法环境不会自动替换。依赖数组表达的是副作用读取了哪些响应式值,而不是开发者希望它“执行几次”。静态检查规则会根据回调中引用的变量推断缺失依赖,因此不应为了消
