react 内存泄漏

发布于 2022-09-12 22:13:07 字数 313 浏览 23 评论 0

在一个已经卸载的组件中 useEffect中调用一个一个定时器,定时器内部使用了useState更新状态,会发生内存泄漏的警告
image.png
image.png
然后我发现使用useState会导致内存泄漏,改用声明一个变量则不会有此警告,但是下面的dom不会发生更改
image.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

时光瘦了 2022-09-19 22:13:08

useEffect这样调整下:


useEffect(() => {
    let num = 0;
    let unmount = false;
    let timer = setInerval(() => {
        num += 1;
        // 调用updateTimingNum时判断下组件是否已经卸载
        if(num > 25 && !unmount) {
            updateTimingNum(num);
            clearTimer();
        }
    }, 1000);
    
    function clearTimer() {
        clearInterval(timer);
    }
    
    // 组件卸载标记下并清除timer
    return () => {
        unmount = true;
        clearTimer();
    }
}, [])
落墨 2022-09-19 22:13:08

https://zh-hans.reactjs.org/d...
通常,组件卸载时需要清除 effect 创建的诸如订阅或计时器 ID 等资源。要实现这一点,useEffect 函数需返回一个清除函数
你useEffect里返回一个清除函数把interval clear掉就行了

烟火散人牵绊 2022-09-19 22:13:08

useEffect return一个清除的函数,你不调用setState当然不会re-render了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文