我似乎在一个大型应用程序中遇到了这个错误(但我不确定具体发生在哪里):
未捕获错误:不变冲突:setState(…):无法更新
我怀疑这可能是在setTimeout
或setInterval
中使用setState
的结果.
这就引出了我真正的问题:为什么会存在这种错误?我不明白为什么ReactJS不只是队列状态和props 更改,有什么概念上的原因吗?我猜这是有原因的,它与应用程序的复杂性和/或避免竞争条件有关...
接下来我的问题是:在React之外(例如在某个异步事件期间)更新组件以避免发生此错误的正确方法是什么?
Edit:
在深入研究这个问题之后,似乎罪魁祸首实际上是我正在使用的底层平台(ElectronJS,正式称为Atom Shell).基本上,ElectronJS将 chromium 和NodeJS结合在一起.我使用了一个NodeJS API来做一些异步的事情,当这完成时,ElectronJS似乎会返回到它停止的调用堆栈,完全绕过事件循环,从而导致与React的竞争条件.