【发布时间】:2017-01-16 20:41:12
【问题描述】:
卸载组件后,调整窗口大小时出现错误。我知道window.removeEventListener 正在被调用,但它的行为就好像它永远不会被调用一样。错误说:
warning.js:36 警告:setState(...): Can only update amounted or 安装组件。这通常意味着您在一个 未安装的组件。这是一个无操作。请检查代码 HeaderMain 组件。
我什至尝试使用 React 文档中的代码示例,它与我的班级正在做的事情相同。来自https://facebook.github.io/react/tips/dom-event-listeners.html:
import React from "react";
var HeaderMain = React.createClass({
getInitialState: function() {
return {windowWidth: window.innerWidth};
},
handleResize: function(e) {
this.setState({windowWidth: window.innerWidth});
},
componentDidMount: function() {
window.addEventListener('resize', this.handleResize);
},
componentWillUnmount: function() {
window.removeEventListener('resize', this.handleResize);
},
render: function() {
return <div>Current window width: {this.state.windowWidth}</div>;
}
});
module.exports = HeaderMain;
我尝试过使用bind(),我已经尝试过ES6,并尝试过不同版本的React.js。我无法摆脱错误。
如何确保我的事件监听器会被移除?
【问题讨论】:
-
这段代码应该可以正常运行。您可能实际上并未粘贴说明问题的代码。
-
不,我确实做到了。此代码不起作用,除了最后一行之外,它与 React 文档中的示例几乎相同。请参阅下面的解决方案。
标签: javascript reactjs