2017-04-01 24 views
0

我在React制作一个网络应用程序。我目前有页面A和页面B.页面A有几个事件监听器绑定到页面上的各种元素。但是,当我从页面A导航到页面B时,我的控制台中出现以下错误(例如几秒钟内的几十个错误):当您离开React页面时,是否需要解除绑定/移除事件监听器?

Warning:setState(... ):只能更新已安装或已安装的组件。这通常意味着您在卸载的组件上调用了setState()。这是一个没有操作。请检查LandingPageHeader组件的代码。

我是否需要在我的componentWillUnmount()函数(页面A)中解除这些监听器的绑定?或者还在发生其他事情?另外,这些事件监听器中的一些绑定到html标签是否重要?

还应该注意的是,上述事件监听器的一些事件处理函数确实执行涉及更新/设置React状态的函数。

回答

1

是的,您可以在componentWillUnmount中解除绑定事件侦听器,或在页面A组件中设置标志,每次在setState之前检查此标志。

componentDidMount() { 
    var _this = this; 
    this._mounted = true; 

    // in listenner function 
    window.addEventListener('resize', funciton() { 
     if (_this._mounted) { 
      _this.setState({}); 
     } 
    }); 
} 

componentWillUnmount() { 
    this._mounted = false; 
}