reactjs - 无法对未安装的组件执行 React 状态更新。这是一个空操作,但它表示内存泄漏
问题描述
因此,即使我在 useEffect 挂钩中使用 clearInterval 来禁用 setTimeOut,虽然我需要超时才能完成,但我仍然收到以下错误消息:
警告:无法对未安装的组件执行 React 状态更新。这是一个空操作,但它表明您的应用程序中存在内存泄漏。要修复,请取消 componentWillUnmount 方法中的所有订阅和异步任务。
我想另一个问题是,因为它是一个持续时间不超过一秒钟的 setTimeOut,我真的需要关心这个吗?我的代码如下:
useEffect(() => {
return () => {
clearInterval(_isMounted);
};
},[urlReferer]);
return (
<User>
{({ data: { me }, error }) => {
if (error) return <Error error={error} />;
const userID = me && me.id;
const userType = (me && me.permissions.some(permission => ['GUEST_USER'].includes(permission))) ? 'GUEST_USER' : 'USER';
return (
...
<Form
method="post"
onSubmit={async e => {
e.preventDefault();
await signin();
setState({
...state,
name: '',
email: '',
password: '',
});
/* Now redirect user to previous page */
if (fromCart) {
Router.back();
_isMounted = setTimeout(() => { toggleCartOpen().catch(err => console.log(err.message)) }, 1000); // 1 second 1000
} else {
Router.push({
pathname: '/',
})
}
}}
>
```
解决方案
您可能应该使用clearTimeout
而不是clearInterval
. AssetTimeout
创建一个Timeout
对象,这就是您正在使用的对象。与 using setInterval
,然后你会使用clearInterval
推荐阅读
- javascript - clearTimeout() 在我的滚动功能中不起作用
- machine-learning - 如何逐个神经元定义神经网络?
- mysql - MySQL 5.5 到 5.7 - 运行较旧的 VB 应用程序时丢失连接
- python - 如何自动将人员添加到频道?
- python - 硒无法找到元素
- jquery - 尝试禁用 ckeditor 中的按钮时出错
- php - 如何避免直接访问图片
- google-apps-script - 您可以将 UrlFetchApp 转换为 Apps Script 中的 Promise 吗?
- wordpress - 如何 register_meta 类型的数组并将其正确添加到 Wordpress REST API?
- netlogo - 指定特定方向的邻居