Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 反应效果清理功能_Reactjs - Fatal编程技术网

Reactjs 反应效果清理功能

Reactjs 反应效果清理功能,reactjs,Reactjs,我有一个post组件,其中我有useEffect,其中照片设置在状态内部。如果我点击fast的其他链接,我会得到错误“无法对未安装的组件执行React状态更新”。因此,它告诉我需要清理,但无论我尝试在线阅读什么,我都不知道如何正确清理,仍然会得到相同的错误。这就是我现在拥有的 const ignore=useRef(真); const[postImage,setPostImage]=useState(); useffect(()=>{ 如果(忽略){ if(后期照片){ storageRef

我有一个post组件,其中我有useEffect,其中照片设置在状态内部。如果我点击fast的其他链接,我会得到错误“无法对未安装的组件执行React状态更新”。因此,它告诉我需要清理,但无论我尝试在线阅读什么,我都不知道如何正确清理,仍然会得到相同的错误。这就是我现在拥有的


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()。