React组件用useEffect定时器内存持续增长怎么办?
我在开发一个实时数据展示组件时用到了useEffect里的setInterval,但组件卸载后内存一直没释放。虽然加了cleanup函数,但内存分析工具显示heap还在持续增长,这是什么问题啊?
代码是这样的:useEffect(() => { const timer = setInterval(() => setData(prev => prev + 1), 1000); return () => clearInterval(timer); }, []);,看起来没问题啊,但卸载组件后定时器还在跑?
尝试过在cleanup里加console.log发现确实执行了,但内存监控工具显示内存还是在缓慢上涨。用Chrome DevTools的Memory tab做堆快照对比,发现闭包对象在不断增加…
试试这样改:
关键点是用mounted变量来标记组件是否挂载。这样即使定时器回调还在执行队列里,也不会去更新已卸载的组件状态。我之前用这个方法解决了内存泄漏,你可以试试看。
另外建议在开发环境用React.StrictMode测试,它会故意多次挂载/卸载组件来暴露这类问题。如果还不行的话,可能需要检查是不是其他地方的闭包引用导致内存没释放。
熬夜debugging最烦这种隐蔽问题了...希望能帮到你!