【问题标题】:Memory leak warning in react component using hooks使用钩子的反应组件中的内存泄漏警告
【发布时间】:2021-11-23 04:03:45
【问题描述】:

我遇到了内存泄漏问题,我在控制台中收到以下错误。

“警告:无法在未安装的组件上执行 React 状态更新。这是一个无操作,但它表明您的应用程序中存在内存泄漏。要修复,请取消使用效果清理中的所有订阅和异步任务函数。”

这是我的代码:

React.useEffect(() => {
        if (data) {
            // I am calling my fetch method
            fetch(logData)
                .then((response) => response.json())
                .then((data) => {
                    //logic
                    //setState called at end of logic
                    setData(data);
                });
        }
    }, [value);

【问题讨论】:

    标签: reactjs memory-leaks react-hooks use-state


    【解决方案1】:

    也许您的组件在获取数据时由于某些交互而被卸载?比如点击关闭按钮(如果你的组件有)

    为避免遇到此错误,您可以检查您的组件是否像这样安装

    const isMounted = useRef(true);
    useEffect(() => () => { isMounted.current = false }, [])
    

    然后只有在组件仍然挂载时才设置状态

    useEffect(() => {
        fetch(res)
            .then(res => res.json())
            .then((data) => {
                if (isMounted) {
                    setState(data)
                }
            })
    }, [dep])
    

    【讨论】:

    • 不,我的组件中没有任何按钮。代码工作正常,但我收到警告。
    • @Developer 那么可能是因为在 useEffect 依赖项发生变化时没有取消 fetch 请求
    • @Developer 可能会尝试使用 AbortController() 在清理函数中取消获取请求
    • 感谢您的帮助!我将尝试上述解决方案。由于该错误不经常发生,因此我需要稍等一下并检查一下。
    猜你喜欢
    • 2021-10-14
    • 2011-10-23
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多