剛學習使用react.
遇到這個問題,我一直不知道原因,後來終於知道了原因.我查看了許多資料,都說是計時器沒有關閉,但是實際上我並沒有開計時器.
後來才發現,是因爲異步請求的事,就是請求在mounted後發出,但是在unmounted之後才響應.這個是我在使用 react-hooks遇到的問題.
錯誤代碼:
useEffect(()=>{
// 進行了異步請求
http.request().then(response=>{
// 修改了state裏的數據
setState();
}).catch(error=>{
...
});
},[]);
實際上應該,消除這個副作用,解決方案:
useEffect(()=>{
// 掛載標誌位
let mounted = true;
// 進行了異步請求
http.request().then(response=>{
// 修改了state裏的數據
if(mounted){// 只有掛載的時候才更新
setState();
}
}).catch(error=>{
...
});
return ()=>{// 消除副作用
mounted = false;
};
},[]);
詳情參考:官網.