私の関数は次のようになります:
this.setState(prevState => ({
time : prevState.time + 1
}), function() {
doSomethingWithNewState(this.state.time)
})
この状況でawaitを使用することは正しいですか?このような:
await this.setState(prevState => ({
time : prevState.time + 1
}));
doSomethingWithNewState(this.state.time);
番号 this.setState
は約束を返しません。
したがって、この場合はawaitを使用できません。コールバックを使用する必要があります。
前の回答で述べたように、setState()
はPromiseを返さないため、await
で意図したとおりに使用することはできません。 (ただし、同期コードをawait
することもできます)。
setState()
がasynchronousであると言われている場合、setState()
のeffectが後で発生する可能性があることを意味します。
さらに、コールバック関数でthis.state
を読み取ると、コールバックが実行される特定の時点でのコンポーネントの状態がわかりますが、それはexactlyではありません。 すべてのコールバック関数が呼び出されますaftersetState()
呼び出しのバッチが実行されます。 ( この問題を参照 )。
待ちきれないthis.setState
既に述べた理由により。ただし、独自の待機可能なsetState関数を簡単に作成できます。
promisedSetState = (newState) => new Promise(resolve => this.setState(newState, resolve));
今すぐ電話できます
await pwomisedSetState({ someState: true });
setState
はコールバックを受け取りますか?最初の例が問題になる理由がわからない
https://medium.learnreact.com/setstate-takes-a-callback-1f71ad5d2296