2015-06-03 33 views
3

我目前工作的一个中型reactJS应用,并得到以下错误消息后,我点击一个组件上的一个按钮:如何调试ReactJS的的setState

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. 

我怎样才能更容易调试呢?为什么没有反应?在违反此规则的情况下,我给了一个特定的组件名称?

你会怎么做?

+0

我只是在寻找任何使用Ajax或定时器的东西......可能在'componentDidMount'内可以执行内部回调** **之后组件已经被卸载。 – WiredPrairie

回答

3

其实,解决这个问题的最好方法是通过本地更改一些反应代码。

This pull-request具体指出如何修改src/renderers/shared/reconciler/ReactUpdateQueue.js以获取非法设置状态的组件。

由于这个拉动请求已经合并到回购协议中,所以不应该很久才能将其集成到npm版本的反应中,人们可能会希望。

10

当提供的消息与特定模式匹配时,您可以覆盖console.warn以使其丢弃而不是日志。在你的情况,你会怎么做:那么

var warn = console.warn; 
console.warn = function(warning) { 
    if (/(setState)/.test(warning)) { 
    throw new Error(warning); 
    } 
    warn.apply(console, arguments); 
}; 

错误的堆栈跟踪将指向导致的警告线。

相关问题