React - stateの値を同期的に更新
はじめに
今回はReactのstateについてメモ。setState()でstateの値を更新し、同期的に取得する方法を書いていきます。
結論
↓のようにすると、同期的にstateの値を更新/取得することができます。
import React, { Component } from 'react';
class App extends Component {
constructor(props) {
super(props);
// 初期化
this.state = {
num: 0,
multipled: 0,
};
console.log('初期値: ' + this.state.num);
}
addOne = () => {
// stateの値を変更
this.setState({
num: this.state.num + 1
// 変更が完了後に実行される
}, () => this.multipleTwo());
}
multipleTwo = () => {
this.setState({
multipled: this.state.num * 2
});
}
render() {
return (
<div>
<button onClick={this.addOne}>+1</button>
<h1>num: { this.state.num }</h1>
<h1>{this.state.num } ✖️ 2 = { this.state.multipled }</h1>
</div>
)
}
}
export default App;
実行するとこうなります↓。
解説
↑のコードは、numに値を1ずつ足し、multipledでnumを倍にした数値を表示するものです。numの値に1足された値に2を掛けたものをmultipledに入れているので、同期的に処理しないと値がおかしなことになってしまいます。
そもそも、setState()はパフォーマンス向上の目的で非同期で値が変更されますが、それを回避して同期的に処理するにはこのようにsetState()でコールバックを受け取るようにします。
addOne = () => {
this.setState({
num: this.state.num + 1
// コールバック
}, () => this.multipleTwo());
}
multipleTwo = () => {
this.setState({
multipled: this.state.num * 2
});
}
今回は以上です。