これまで、 の呼び出しは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がフックを使用するときに状態の更新をバッチ処理するかどうかを知りたい場合は、この答えそれについていくらかの洞察を提供します。