2017-04-16 11 views
1

私はsetStateは、同期または非同期にすることができます認識しています:なぜsetStateを非同期にすることができますか?

setState()はすぐthis.state変異したが 保留の状態遷移を作成しません。この メソッドを呼び出した後にthis.stateにアクセスすると、既存の値が返される可能性があります。

setState へのコールの同期動作の保証はなく、パフォーマンスの向上のためにコールをバッチ処理することができます。

右、と私は機能がいくつかのことを実行理解:

  • アップデート新しい状態で、必要に応じて状態
  • 更新仮想と現実のDOMの実際の値は
値を

しかし、私はこれが時には同期的で、時には非同期的である理由を理解しようとしていますか?シーンの後ろで何が起こるのですか?なぜそれはいつも同期的ではないのですか?

ありがとうございました。

+1

この[質問](http://stackoverflow.com/questions/28922275/in-reactjs-why-does-setstate-behave-differently-when-called-synchronously)で一見ありますか? – Felix

答えて

0

あなたの状態の変更は、(アプリに応じて)多くのソースから来る可能性があり、コンポーネントの各状態の変更はキューにスケジュールされます。したがって、コンポーネント内でthis.setState()を実行すると、このコンポーネントが解決される可能性のある他のすべてのsetStateと一緒に待機します。そして、あなたがthis.setState({value:this.state.value + 1})のようなことをしたときに起こるかもしれません。そして、この操作は解決するのを待っています。最新のthis.stare.valueで動作し、予期しないリターンをもたらします。一般的に、以前の状態に基づいている状態の変更を処理するとき、私はこのように状態を変更しています:this.setState((prevState)=> prevState.value + 1)これは、私は現在、この記憶された状態に応じて、this.stateに頼らざるを得ずに変更を加えました。

関連する問題