React useEffect 中事件监听的闭包陷阱与正确清理方式
在 React 函数组件里用 useEffect 注册 window 或 DOM 事件监听时,经常会遇到回调里拿到的 state 始终是旧值、组件卸载后监听没清干净导致内存泄漏,或者依赖数组一改就疯狂重绑事件的问题。这类场景在实现滚动位置监听、键盘快捷键、窗口 resize、点击外部关闭弹层时非常常见。根本原因在于 useEffect 的回调形成了一个闭包,捕获的是当次渲染的变量快照,而事件监听器的注册与移除又依赖函数引用是否一致。如果依赖数组写错,或者清理函数里用了匿名函数,removeEventList...