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 毫秒后执行,可避免此警告。

代码示例:

  1. setTimeout(() => {
  2. // 路由跳转 url 带 where 参数
  3. history.push({
  4. pathname: '/user/reg-result',
  5. query: {
  6. where: 'register',
  7. },
  8. });
  9. }, 10);

也许这个 Warning 可以不用在意!

(完)