[英]How to clean up function in a useffect call?
所以我在 useEffect 挂钩中更新 state 并收到此错误如果我们在 useEffect 挂钩中使用 async/await 语法,我不知道如何使用清理 function
错误:警告:无法对未安装的组件执行 React state 更新。 这是一个无操作,但它表明您的应用程序中存在 memory 泄漏。 要修复,请取消 %s.%s 中的所有订阅和异步任务,useEffect 清理 function,
const getToken = async () => {
const mytoken = await AsyncStorage.getItem("fb_token");
if (mytoken) {
navigation.navigate("Main", { screen: "Map" });
setToken(mytoken);
} else {
setToken(false);
}
};
getToken();
}, [navigation]);```
How to update state and use clean up function should i declare this function outside hook but if i do that how would i use that function as a clean up?
您可以通过从useEffect
返回 function 来在组件因useEffect
依赖项之一更改而卸载或重新安装时获得回调。 你可以用它来设置一个标志,让自己知道事情发生了变化。 见***
评论:
useEffect(() => {
let cancelled = false; // *** A flag to let us know this is cancelled
const getToken = async () => {
const mytoken = await AsyncStorage.getItem("fb_token");
if (!cancelled) { // *** Check the flag
if (mytoken) {
navigation.navigate("Main", { screen: "Map" });
setToken(mytoken);
} else {
setToken(false);
}
}
};
getToken().catch(error => { // ***
// Handle/report error here... // *** Handle errors from the async function
}); // ***
// *** A callback to let us know to set the flag
return () => {
cancelled = true;
};
}, [navigation]);
(您还违反了上面标记的承诺规则之一:始终处理错误,或者将 promise 链传递给可以处理的东西。)
请注意,正如我之前提到的,这将在两种情况下跳过设置令牌:
卸载的组件(给您带来麻烦的组件)
navigation
改变了
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.