最近仕事でReactをやっている。
今回のネタはひとこと(ひとコード?)で言うと以下のようなこと。
getInitialState () {
return { clicked: false };
},
clickHandler () {
this.setState({ clicked: true });
console.log(this.state.clicked); // -> false
},
render () {
console.log(this.state.clicked); // -> true
return <button onClick={this.clickHandler}>Click Me</button>;
}
インタラクションのハンドラで this.setState
したとして、そのハンドラ内でthis.state
を参照しても、まだ更新後の値は取れない。render()
が呼ばれるタイミングでは更新後の値になっている。実際にステートが更新されるタイミングは意図的に制御されているらしい。トリッキーだ。
更新後の値は変数に入れておいて this.setState
しつつ、ハンドラ内ではその変数の値を使うのがおそらく正解だろう。
getInitialState () {
return { clicked: false };
},
clickHandler () {
var value = true;
this.setState({ clicked: value });
console.log(value); // -> true
},
render () {
console.log(this.state.clicked); // -> true
return <button onClick={this.clickHandler}>Click Me</button>;
}