React React-router Invariant Violation:replaceState(...)Error

时间:2015-03-13 01:16:37

标签: reactjs react-router

我已经开始使用Flux和react-router开发应用程序。我的一个组件使用从Flux商店获得的状态填充。这很好用。但是,当我使用react-router远离此组件然后再返回时,我得到上述错误。如果我刷新页面,则错误消失,页面工作正常。

根据我对此的理解,似乎react-router没有重新安装这个组件,因此它试图改变未安装组件的状态,从而导致错误。

如果这是正确的,我如何让react-router重新安装组件?

PS。这个代码太长了,不能发布在这里它发布在Github上,但由于问题已经解决,现在帖子已被删除。 更新(谢谢肖恩):

可以使用dist文件夹运行应用程序,只需将此文件夹复制到网络服务器并将浏览器指向该文件夹(我在本地使用xampp)。问题出在周页面上(组件TableWeekly运行此表)。使用下拉列表更改讲师视图会出现问题。首次加载或刷新后工作正常,但导航到另一个页面并再次返回时失败。

1 个答案:

答案 0 :(得分:0)

您的问题是您订阅了componentDidMount中的更改事件,但从未在componentWillUnmount上取消订阅。换句话说,每次安装TableWeekly组件时,都会附加一个新的事件处理程序,但在该组件卸载时从不分离。

MainStore发出更改事件时,它将在未安装的组件上调用_onChange事件处理程序,而后者将尝试更新状态并产生不变的错误。

要解决此问题,请将以下componentWillUnmount方法添加到TableWeeklyDropdownWeekly

componentWillUnmount: function() {
    MainStore.removeChangeListener(this._onChange);
}