私は自分のコンポーネントの1つでウィンドウの「スクロール」イベントを待ち受けます。ただし、コンポーネントがでアンマウントされている場合は、、スクロールイベントリスナーは削除されていません。Reactコンポーネントでイベントリスナーをアンマウントする
コンポーネントがアンマウントされた後に、スクロールイベントが発生したとき、次のエラーが生成される:
warning.js:36警告:SETSTATE(...)のみマウントまたは 実装部品を更新することができます。これは、通常、アンマウントされたコンポーネント でsetState()を呼び出したことを意味します。これはノーオペレーションです。 TopNavDesktopコンポーネント のコードを確認してください。
このイベントリスナーを正しく削除するにはどうすればよいですか?
例コード:
class NavBar extends Component {
constructor() {
super();
this.state = {
distanceScrolled: null
}
}
componentDidMount() {
window.addEventListener('scroll', this.handleScroll.bind(this));
}
componentWillUnmount() {
window.removeEventListener('scroll', this.handleScroll.bind(this));
}
handleScroll(e){
const distanceScrolled = e.srcElement.body.scrollTop;
this.setState({ distanceScrolled: distanceScrolled });
}
render { ... }
}
うわー、私は 'someFn.bind(これは)'新しい参照を作成していたことを認識していなかった驚いて。これを指摘してくれてありがとう:) –