React 对已卸载组件状态更新的警告
React 在浏览器控制台输出如下警告:
Warning: Can’t perform a React state update on an unmounted component. This is a no-op, but it indicates a memory leak in your application. To fix, cancel all subscriptions and asynchronous tasks in a useEffect cleanup function.
翻译:无法对卸载的组件执行 React 状态更新。这是一个空操作,但它表明应用程序中存在内存泄漏。若要修复,请取消 useEffect 清理函数中的所有订阅和异步任务。
此警告消息,多见于路由跳转时。
例如,在用户触发网络请求时,通常需要在组件做一个 loading 状态提示,在网络请求返回后,立即执行路由跳转,而 loading 状态还在继续更新,继而触发警告消息。
可以考虑使用setTimeout
执行路由跳转,设置约 10 毫秒后执行,可避免此警告。
代码示例:
setTimeout(() => {
// 路由跳转 url 带 where 参数
history.push({
pathname: '/user/reg-result',
query: {
where: 'register',
},
});
}, 10);
也许这个 Warning 可以不用在意!
- 在知乎有文章:https://zhuanlan.zhihu.com/p/454841748
- 在 GitHub 有讨论:https://github.com/reactwg/react-18/discussions/82
(完)