我已经开始使用Flux和react-router开发应用程序。我的一个组件使用从Flux商店获得的状态填充。这很好用。但是,当我使用react-router远离此组件然后再返回时,我得到上述错误。如果我刷新页面,则错误消失,页面工作正常。
根据我对此的理解,似乎react-router没有重新安装这个组件,因此它试图改变未安装组件的状态,从而导致错误。
如果这是正确的,我如何让react-router重新安装组件?
PS。这个代码太长了,不能发布在这里它发布在Github上,但由于问题已经解决,现在帖子已被删除。 更新(谢谢肖恩):
可以使用dist文件夹运行应用程序,只需将此文件夹复制到网络服务器并将浏览器指向该文件夹(我在本地使用xampp)。问题出在周页面上(组件TableWeekly运行此表)。使用下拉列表更改讲师视图会出现问题。首次加载或刷新后工作正常,但导航到另一个页面并再次返回时失败。
答案 0 :(得分:0)
您的问题是您订阅了componentDidMount
中的更改事件,但从未在componentWillUnmount
上取消订阅。换句话说,每次安装TableWeekly
组件时,都会附加一个新的事件处理程序,但在该组件卸载时从不分离。
当MainStore
发出更改事件时,它将在未安装的组件上调用_onChange
事件处理程序,而后者将尝试更新状态并产生不变的错误。
要解决此问题,请将以下componentWillUnmount
方法添加到TableWeekly
和DropdownWeekly
componentWillUnmount: function() {
MainStore.removeChangeListener(this._onChange);
}