Javascript React.js在组件中没有操作?

Javascript React.js在组件中没有操作?,javascript,reactjs,memory-leaks,use-effect,Javascript,Reactjs,Memory Leaks,Use Effect,我相信no op来自我的useEffect,因此,我尝试实施清理。但是,我仍然存在no-op问题。这是错误: 无法对未安装的组件执行React状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。要修复此问题,请取消useEffect清理函数中的所有订阅和异步任务。 以导出格式(由父级创建) 在div中(由ForwardRef(网格)创建) 在ForwardRef(网格)中(由WithStyles(ForwardRef(网格))创建) 在WithStyles中(ForwardRef(Gr

我相信no op来自我的useEffect,因此,我尝试实施清理。但是,我仍然存在no-op问题。这是错误:

无法对未安装的组件执行React状态更新。这是一个no-op,但它表示应用程序中存在内存泄漏。要修复此问题,请取消useEffect清理函数中的所有订阅和异步任务。 以导出格式(由父级创建) 在div中(由ForwardRef(网格)创建) 在ForwardRef(网格)中(由WithStyles(ForwardRef(网格))创建) 在WithStyles中(ForwardRef(Grid))(由父级创建)

以下是我的useEffect实现:

React.useEffect(() => {
    let isSubbed = true;
    const fetchFormats = async (subbedStatus) => {
        getEGMFormats(enums.EGM_EXPORT_FORMATS)
            .then((data) => {
                subbedStatus && setResponse(data.data);
            })
            .catch((err) => {
                subbedStatus && setErrorStatusCode(err.response.status);
            })
            .finally(() => {
                subbedStatus && setIsSubmitting(false);
            });
    };
    fetchFormats(isSubbed);
    return () => {
        cancelAxios();
        isSubbed = false;
    };
}, [setErrorStatusCode]);
cancelAxios函数调用正在导入,但其功能如下:

export const cancelAxios=()=>source.cancel()


我在这里做错了什么,或者可能在我的组件的其他地方?这是组件中唯一的使用效果?

Hm。。。您应该使用闭包中的标志变量,而不是函数参数

React.useEffect(() => {
    let isSubbed = true;
    const fetchFormats = async () => {
        getEGMFormats(enums.EGM_EXPORT_FORMATS)
            .then((data) => {
                isSubbed&& setResponse(data.data);
            })
            .catch((err) => {
                isSubbed&& setErrorStatusCode(err.response.status);
            })
            .finally(() => {
                isSubbed&& setIsSubmitting(false);
            });
    };
    fetchFormats();
    return () => {
        cancelAxios(); // not sure what is this...
        isSubbed = false;
    };
}, [setErrorStatusCode]);

不是很好的解决方案,但很有帮助,谢谢。事实证明,我必须在另一个子组件中实现这一点,并删除cancelAxios()。