【发布时间】:2021-05-25 21:58:22
【问题描述】:
我正在使用useEffect 钩子从服务器获取数据,这些数据被传递到一个列表,当我注册时,我收到如下警告
无法对未安装的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要解决此问题,请在
useEffect清理函数中取消所有订阅和异步任务。
const getUserData = () => {
axios.get(`${API_URL}`).then((res) => {
if (res.data) {
setUserData(res.data);
}
});
};
useEffect(() => {
getUserData();
}, []);
const logout = () => {
signout(() => {
history.push('/signin');
});
};
return (
<div>
<button onClick={() => logout()}>Sign out </button>
</div>
);
【问题讨论】:
-
history.push('/signin);中有语法错误。您需要关闭报价 -
我已经更新了
-
就像错误消息说的那样,你需要通过返回一个清理函数来清理你的
useEffect钩子启动的所有异步任务。在调用setState之前,使用它来中止请求或确保组件仍然挂载。 -
看起来您的 API 请求在您通过
history.push('/signin')导航离开此组件之后返回。在您的useEffect中返回一个函数来处理它。
标签: reactjs react-hooks