Can't perform a React on an unmounted component

剛學習使用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;
	};
},[]);

詳情參考:官網.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章