我正在使用自定義掛鉤在 3 秒后創建自動注銷行為。我從我的主要組件呼叫這個鉤子并使用isLogin決定登錄狀態。設定憑據后,呼叫setLogin函式并由于 useEffect setTimeout 被加載到記憶體中。問題是,3秒后我收到了這個錯誤,
無法對未安裝的組件執行 React 狀態更新。這是一個無操作,但它表明您的應用程式中存在記憶體泄漏
如果您認為這不是處理此類情況的正確方法,請指導我。
const [isLogin, setLogin] = useState(someValue);
useEffect(() => {
if (tokenExist && notExpireYet) {
setTimeout(() => remValue(), 3000);
}
}, [isLogin]);
uj5u.com熱心網友回復:
問題是setTimeout即使在卸載組件之后也會呼叫您的呼叫。為了在依賴項更改之間正確清理效果,您應該回傳一個清理的函式。
在你的情況下,它會是這樣的:
const [isLogin, setLogin] = useState(someValue);
useEffect(() => {
if (tokenExist && notExpireYet) {
const id = setTimeout(() => remValue(), 3000);
return () => clearTimeout(id);
}
}, [isLogin]);
這將確保當組件不再存在時您的效果不會運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/453714.html
上一篇:對異步行為感到困惑
下一篇:在并行流上傳播偵探包
