异步设置ReactJS状态

nic*_*las 7 javascript asynchronous setstate reactjs

如果你执行了一个异步操作来更新状态componentWillMount(比如说文档),但在异步调用完成之前卸载了组件(用户导航),你最终会尝试异步回调试图在现在卸载的组件,和

"不变违规:replaceState(...):只能更新已安装或安装的组件."

错误.

最好的方法是什么?

谢谢.

Yur*_*nko 9

您可以使用component.isMounted方法在替换其状态之前检查组件是否实际附加到DOM.文件.

isMounted()true如果组件呈现到DOM中则返回, false否则返回.您可以使用此方法来保护对setState()或的异步调用forceUpdate().

UPD:在您投票之前.这个答案在两年前就已经过了.这是当天回归的方式.如果您刚刚开始使用React,请不要按照这个答案.使用componentDidMount或您需要的任何其他生命周期钩子.


Fli*_*ion 2

更新2016

不要开始使用isMounted,因为它将从 React 中删除,请参阅文档

对于异步调用产生的问题,最好的解决方案可能cmomponentWillMount是将内容移至componentDidMount

有关如何正确解决此问题以及如何不需要使用 isMounted 的更多信息,请参阅此处:isMounted 是一种反模式