コンポーネントがアンマウントされた後、ウィンドウのサイズを変更するとエラーが発生します。私はwindow.removeEventListener
が呼び出されていることを知っていますが、決して呼び出されないかのように動作しています。エラーメッセージ:React.jsで、componentWillUnmountを使用してイベントリスナーを削除すると、イベントリスナーが削除されるようにするにはどうすればよいですか?
warning.js:36警告:setState(...):マウントされたコンポーネントまたは マウントコンポーネントのみを更新できます。これは、通常、アンマウントされたコンポーネント でsetState()を呼び出したことを意味します。これはノーオペレーションです。 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
の異なるバージョンを試してみました。私はエラーを取り除くことはできません。
イベントリスナーが削除されるようにするにはどうすればよいですか?
handleResize: function(e) {
this.setState({windowWidth: window.innerWidth} , function(){
console.log("windowWidth" , windowWidth);
});
}
変更ルートやcomponentWillUnmount
関数を呼び出した後、あなたのconsole
を開き、ウィンドウのサイズを変更する任意のアクションを使用してテストして:
このコードは正常に動作するはずです。実際には、問題を示すコードを実際には貼り付けなかったでしょう。 –
いいえ、私は実際にしました。このコードは機能しません。最後の行を除いて、Reactドキュメントの例とほとんど同じです。以下の私の解決策を見てください。 – BBaysinger