警告:
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.
知道它可以来自哪里。陷阱或类似的东西?
我已经查看了代码中的所有setState并将其替换为确保。无法找到它的来源......
到目前为止我的观察结果:
所以!我理解错误是什么,但这次警告是关于_class component
所以我迷路了......我刚刚升级到react-router
v4,它需要进行大量更改,因此很难将其本地化警告的来源。
之前有人遇到过类似的问题吗?
编辑:
我发现导致问题的setState
。它在react-router-server
。我会调查一下,看看能不能解决它!
感谢@zerkms,因为终端中没有跟踪,因此想要使用调试器来获取行号。
我使用了v8实验检查员(https://stackoverflow.com/a/39901169/3687661)。效果很好:))
答案 0 :(得分:12)
由于API调用等异步活动,这种情况很常见。例如,当您尝试在从服务器接收数据并且未接收到该状态的相应页面之后设置状态时,会发生这种情况。
要避免这种情况,请在设置该组件中的状态之前检查组件是否已安装。使用标记进行检查,在List<Wrapper<Wrapper<?>>> ls1 = new ArrayList<>();
And
Wrapper<Wrapper<?>> l1 = new Wrapper<>(new Wrapper<>(t));
ls1.add(l1); // OK
中说final String server="localhost/";
final String db_name="db_name";
final String userName="xxxx";
final String password="xxxx";
Connection myConn= DriverManager.getConnection("jdbc:mysql://"+server+db_name,userName,password);
并在this.mounted = true
中将标记更改为false。在组件中使用componentDidMount
来检查组件是否已安装。这将修复警告。
希望这有帮助!
答案 1 :(得分:10)
当您在xmlns:batch="http://www.springframework.org/schema/batch"
或this.setState
或其他延迟功能中调用setTimeout
时,通常会发生这种情况。
如果您使用setInterval
/ setTimeout
,请务必在setInterval
中致电clearTimeout
/ clearInterval
。