有关在已卸载组件上调用setState的警告

Yor*_*rmi 6 reactjs react-router

警告:

Warning: setState(...): Can only update a mounted or mounting component. This usually means you called setState() on an unmounted component. This is a no-op. Please check the code for the _class component.
Run Code Online (Sandbox Code Playgroud)

知道它可以来自哪里.陷阱还是那样的事情?

我已经查看了代码中的所有setState并将其替换为确保.无法找到它的来源......

我到目前为止的观察:

  • 只在我的测试中发生
  • 浏览器没问题
  • 我以为我还有更多...但是经过更多测试后我感到很困惑,因为它不符合我认为理解的模式......

所以!我明白错误是什么,但这次警告是关于一个_class component所以我迷路了......我刚刚升级到react-routerv4,它需要进行大量更改,因此很难本地化警告的来源.

以前有人遇到过类似的问题吗?

编辑:我发现setState这导致了问题.它在react-router-server.我会调查一下,看看能不能解决它!

感谢@zerkms,因为终端中没有跟踪,所以想要使用调试器来获取行号.

我使用了v8实验检查员(/sf/answers/2793081861/).工作得很好:)

Pra*_*avi 13

这是常见的,因为API调用等异步活动.例如,当您尝试在从服务器接收数据后设置状态并且未安装接收该状态的相应页面时,会发生这种情况.

为避免这种情况,请在设置该组件中的状态之前检查组件是否已安装.使用标志来检查,说this.mounted = truecomponentDidMount和更改标志的假componentWillUnmount.this.mounted在整个组件中使用以检查组件是否已安装.这将修复警告.

希望这可以帮助!


Dav*_*lsh 11

这当你调用通常发生的this.setState一个内setTimeoutsetInterval或其他一些延迟功能.

如果你正在使用setTimeout/ setInterval确保你打电话clearTimeout/ clearInterval进来componentWillUnmount.