Reactのイベントハンドラにおいて「Cannot read property '〇〇' of undefined」と出る
4094 ワード
ES6記法でReactのコードを書いていた時、イベントハンドラ内で this
が使えなくなっていたので、その原因を共有します。
問題のコード
App.jsx
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
status: "No"
};
}
changeState() {
this.setState({ status: "Yes" });
}
render() {
return (
<div>
<button onClick={ this.changeState }>Change!</button>
<div>{this.state.status}</div>
</div>
);
}
}
App.jsx
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
status: "No"
};
}
changeState() {
this.setState({ status: "Yes" });
}
render() {
return (
<div>
<button onClick={ this.changeState }>Change!</button>
<div>{this.state.status}</div>
</div>
);
}
}
この場合、ブラウザで実行してみると以下のように表示されます。
このボタンを押すと表示される文字が「Yes」に変わるはずなのですが、変わることはなく、下のようなエラーが発生しました。
解決策
render()
関数の onClick
において、以下のように変更します。
App.jsx
<button onClick={ this.changeState.bind(this) }>Change!</button>
原因
ES5の React.createClass
を使った場合はイベントハンドラが自動でbindされるのですが、ES6で React.Component
を作成した場合、イベントハンドラは自動でbindされないようです。
Author And Source
この問題について(Reactのイベントハンドラにおいて「Cannot read property '〇〇' of undefined」と出る), 我々は、より多くの情報をここで見つけました https://qiita.com/tenma/items/3ca6c19ec8f90baaf854著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .