web-dev-qa-db-ja.com

await setState()を使用することは正しいですか?

私の関数は次のようになります:

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);
6
MRaimon

番号 this.setStateは約束を返しません。

したがって、この場合はawaitを使用できません。コールバックを使用する必要があります。

10
Anas

前の回答で述べたように、setState()はPromiseを返さないため、awaitで意図したとおりに使用することはできません。 (ただし、同期コードをawaitすることもできます)。

setState()asynchronousであると言われている場合、setState()effectが後で発生する可能性があることを意味します。

さらに、コールバック関数でthis.stateを読み取ると、コールバックが実行される特定の時点でのコンポーネントの状態がわかりますが、それはexactlyではありません。 すべてのコールバック関数が呼び出されますaftersetState()呼び出しのバッチが実行されます。 ( この問題を参照 )。

3
Dan Burzo

待ちきれないthis.setState既に述べた理由により。ただし、独自の待機可能なsetState関数を簡単に作成できます。

promisedSetState = (newState) => new Promise(resolve => this.setState(newState, resolve));

今すぐ電話できます

await pwomisedSetState({ someState: true });
0
David Schumann

setStateはコールバックを受け取りますか?最初の例が問題になる理由がわからない

https://medium.learnreact.com/setstate-takes-a-callback-1f71ad5d2296

0