在反应中调用 fetch API 时出现内存泄漏错误
Memory leak error while calling fetch API in react
我在 React 中编写了以下代码,但出现内存泄漏错误。我尝试了一些 hack,比如调用 abort 并将状态设置为 null,但到目前为止对我没有任何效果。
我得到的错误:
无法对未安装的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要修复,请在使用 Effect 清理函数中取消所有订阅和异步任务。
我的代码片段:
useEffect(() => {
//some const defined
fetch(myData)
.then(response => response.json())
.then(data => {
//some code
if (consition) {
//setting state
setData(abc);
setDataPresent(true);
}
});
// fix for memory leak error
return () => {
setData({});
setDataPresent(false);
};
}, [dep]);
试试这个!您需要使用 useEffect 取消承诺。
在下面的代码中,fetch 函数 returns 是一个承诺。您可以通过在 useEffect 范围内设置条件来取消承诺,防止应用程序在组件卸载后设置状态。
我推荐阅读这篇关于在 useEffect 中取消承诺的短文。
https://juliangaramendy.dev/blog/use-promise-subscription
不要忘记 useEffect 中的依赖项。
// Let's start!
useEffect(() => {
let isMounted = true;
fetch(myData)
.then(response => response.json())
.then(data => {
if (isMounted) {
setDataPresent(true)
setData(abc)
}
});
return () => {
isMounted = false;
};
}, [deps]);
我在 React 中编写了以下代码,但出现内存泄漏错误。我尝试了一些 hack,比如调用 abort 并将状态设置为 null,但到目前为止对我没有任何效果。
我得到的错误:
无法对未安装的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要修复,请在使用 Effect 清理函数中取消所有订阅和异步任务。
我的代码片段:
useEffect(() => {
//some const defined
fetch(myData)
.then(response => response.json())
.then(data => {
//some code
if (consition) {
//setting state
setData(abc);
setDataPresent(true);
}
});
// fix for memory leak error
return () => {
setData({});
setDataPresent(false);
};
}, [dep]);
试试这个!您需要使用 useEffect 取消承诺。
在下面的代码中,fetch 函数 returns 是一个承诺。您可以通过在 useEffect 范围内设置条件来取消承诺,防止应用程序在组件卸载后设置状态。
我推荐阅读这篇关于在 useEffect 中取消承诺的短文。 https://juliangaramendy.dev/blog/use-promise-subscription
不要忘记 useEffect 中的依赖项。
// Let's start!
useEffect(() => {
let isMounted = true;
fetch(myData)
.then(response => response.json())
.then(data => {
if (isMounted) {
setDataPresent(true)
setData(abc)
}
});
return () => {
isMounted = false;
};
}, [deps]);