刚学习使用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;
};
},[]);
详情参考:官网.