Reactjs 反应效果清理功能
我有一个post组件,其中我有useEffect,其中照片设置在状态内部。如果我点击fast的其他链接,我会得到错误“无法对未安装的组件执行React状态更新”。因此,它告诉我需要清理,但无论我尝试在线阅读什么,我都不知道如何正确清理,仍然会得到相同的错误。这就是我现在拥有的Reactjs 反应效果清理功能,reactjs,Reactjs,我有一个post组件,其中我有useEffect,其中照片设置在状态内部。如果我点击fast的其他链接,我会得到错误“无法对未安装的组件执行React状态更新”。因此,它告诉我需要清理,但无论我尝试在线阅读什么,我都不知道如何正确清理,仍然会得到相同的错误。这就是我现在拥有的 const ignore=useRef(真); const[postImage,setPostImage]=useState(); useffect(()=>{ 如果(忽略){ if(后期照片){ storageRef
const ignore=useRef(真);
const[postImage,setPostImage]=useState();
useffect(()=>{
如果(忽略){
if(后期照片){
storageRef
.儿童(照片后)
.getDownloadURL()
。然后((url)=>{
setPostImage(url);
});
}
}
如果(路径名===“/profile”| |路径名===`/profile/${params.user}`){
设置显示(假);
}否则{
设置显示(正确);
}
return()=>(ignore.current=false);
},[postData]);
清理工作应该是什么样子?在过去的几周里,我很难理解这一点。问题是
setpositmage(url)
在卸载组件时运行。要避免此错误,请在更新状态之前检查是否ignore.current
为true
:
storageRef
.child(postPhoto)
.getDownloadURL()
.then((url) => {
if(ignore.current) setPostImage(url); //--> here
});
您的变量名似乎向后-您希望在组件卸载时忽略数据。我将
ignore
重命名为unmounted
,并在cleanup函数中将其设置为true
。您需要停止所有状态更改,因此您还需要检查中的卸载
。然后
回调以便我只想清除状态?我不会用cleanup停止useEffect中运行的函数?是的,在then块中进行检查,因为在卸载过程中可能没有解析getDownloadURL()。