Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调试ReactJS';s设置状态_Reactjs - Fatal编程技术网

如何调试ReactJS';s设置状态

如何调试ReactJS';s设置状态,reactjs,Reactjs,我目前正在处理一个中等大小的reactJS应用程序,单击组件上的按钮后会收到以下错误消息: 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. 我怎样才能更容易地调试它?为什么reactJS不给我一个违反此规则的特定组件名称 您将如何

我目前正在处理一个中等大小的reactJS应用程序,单击组件上的按钮后会收到以下错误消息:

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.
我怎样才能更容易地调试它?为什么reactJS不给我一个违反此规则的特定组件名称


您将如何执行此操作?

您可以覆盖
控制台。当提供的消息与特定模式匹配时,发出警告,使其抛出而不是记录。在您的情况下,您应该:

var warn=console.warn;
console.warn=功能(警告){
如果(/(设置状态)/.测试(警告)){
抛出新错误(警告);
}
warn.apply(控制台、参数);
};

然后,错误的堆栈跟踪将指向导致警告的行。

实际上,解决此问题的最佳方法是在本地更改一些react代码

特别指出如何修改
src/renderers/shared/reconciler/ReactUpdateQueue.js
以获取非法设置状态的组件


由于此拉取请求已经合并到repo中,因此不久之后它将集成到react的npm版本中。

我只想寻找使用Ajax或计时器的任何东西。。。可能在
componentDidMount
中,因为内部回调可以在组件已经卸载后执行。这实际上非常聪明,但由于某些原因对meAh不起作用。好吧,我想原因是-记录的消息说“警告:…”,但它实际上是一个错误日志。因此,我不得不将代码片段中的“警告”替换为“错误”。我希望我能给你买咖啡:)