useState は同期的ですか? [重複] 質問する

useState は同期的ですか? [重複] 質問する

これまで、 の呼び出しはsetState({myProperty})非同期であり、 の値はthis.state.myPropertyコールバックまたは次のメソッドまで有効ではないことが明示的に警告されていましたrender()

useState を使用して、明示的に更新した後に状態の値を取得するにはどうすればよいですか?

これはフックではどのように動作するのでしょうか? 私が知る限り、のセッター関数はuseStateコールバックを受け取りません。例えば

const [value, setValue] = useState(0);
setValue(42, () => console.log('hi callback');

コールバックは実行されません。

以前の世界での私の他の回避策は、クラスにインスタンス変数を設定することです(e.g. this.otherProperty = 42)が、再利用する関数インスタンスがないため (this厳密モードではなし)、ここでは機能しません。

ベストアンサー1

使用できますuseEffect更新後に最新の状態にアクセスします。複数の状態フックがあり、その一部のみの更新を追跡したい場合は、関数の 2 番目の引数として配列で状態を渡すことができますuseEffect

useEffect(() => { console.log(state1, state2)}, [state1])

上記は更新されたuseEffect場合にのみ呼び出され、この関数内の値は最新ではない可能性があるためstate1信頼しないでください。state2

useStateによって作成された更新関数が同期的であるかどうか、つまりReactがフックを使用するときに状態の更新をバッチ処理するかどうかを知りたい場合は、この答えそれについていくらかの洞察を提供します。

おすすめ記事