React 中使用 useEffect 清理函数时,为什么有时候清理不生效?
在 React 函数组件里,useEffect 的清理函数负责取消订阅、清除定时器、中断请求等收尾工作,但实际开发中经常遇到“清理函数不执行”或者“执行了却清错了东西”的情况。典型场景是组件卸载后定时器还在跑、WebSocket 连接没断开、事件监听器重复绑定,或者某个异步请求回来时组件已经没了,却仍然调用了 setState。问题根源通常集中在依赖数组写法、闭包捕获的值、清理函数与副作用的对应关系,以及 StrictMode 下的双调用行为。下面从一个真实案...