Reactはパフォーマンスの最適化のために、状態の更新を非同期でバッチで実行する可能性があることを知っています。したがって、を呼び出しsetState
た後に更新される状態を信頼することはできません。しかし、あなたはに反応信頼できるのと同じ順序で状態を更新setState
と呼ばれているため
- 同じコンポーネント?
- 異なるコンポーネント?
次の例のボタンをクリックすることを検討してください。
1. aがfalse、bがtrueである可能性はありますか?
class Container extends React.Component {
constructor(props) {
super(props);
this.state = { a: false, b: false };
}
render() {
return <Button onClick={this.handleClick}/>
}
handleClick = () => {
this.setState({ a: true });
this.setState({ b: true });
}
}
2. aがfalseでbがtrueである可能性はありますか?
class SuperContainer extends React.Component {
constructor(props) {
super(props);
this.state = { a: false };
}
render() {
return <Container setParentState={this.setState.bind(this)}/>
}
}
class Container extends React.Component {
constructor(props) {
super(props);
this.state = { b: false };
}
render() {
return <Button onClick={this.handleClick}/>
}
handleClick = () => {
this.props.setParentState({ a: true });
this.setState({ b: true });
}
}
これらは私のユースケースの極端な簡略化であることを覚えておいてください。たとえば、例1で両方の状態パラメーターを同時に更新し、例2で最初の状態更新へのコールバックで2番目の状態更新を実行するなど、これを別の方法で実行できることを理解しています。しかし、これは私の質問ではありませんが、そして私は、Reactがこれらの状態更新を実行する明確に定義された方法がある場合にのみ興味があります。
ドキュメンテーションによって裏付けられたどんな答えも大歓迎です。