React useEffect 清理函数里闭包捕获了旧值,导致定时器无法清除
在 React 里用 useEffect 管理定时器时,清理函数偶尔会失效,表现为组件卸载后 setInterval 还在跑,或者依赖变化后旧定时器没被清掉、新定时器又叠加上来。问题通常不是 useEffect 本身,而是清理函数捕获的变量与创建定时器时用的不是同一个引用:比如把 timerId 存在 useRef 里,清理时读到的可能是被覆盖后的新 id;或者在依赖数组里漏掉了某些值,导致 effect 重新执行时清理函数跑的是上一次闭包里的旧变量。这类 bug 在轮询、倒计时、防抖节流、WebSocke...