ホームページ > ウェブフロントエンド > jsチュートリアル > React の setState が非同期であるのはなぜですか? 更新された状態に確実にアクセスするにはどうすればよいですか?

React の setState が非同期であるのはなぜですか? 更新された状態に確実にアクセスするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-15 19:18:11
オリジナル
256 人が閲覧しました

Why is React's setState Asynchronous, and How Can I Ensure I Access the Updated State?

React の setState: 非同期状態更新

React の setState メソッドは非同期であり、状態をすぐには更新しません。開発者が setState の呼び出し後に状態が即座に変更されることを期待している場合、この動作は混乱を招くことがよくあります。

この例では、console.log(this.state.boardAddModalShow) が実行されるため、ボタンをクリックしてもコンポーネントの状態は更新されません。状態の変更が完了する前に。

更新された状態を正しくログに記録するには、setState に提供されるコールバック関数を次のようにする必要があります。 used:

openAddBoardModal() {
  this.setState({ boardAddModalShow: true }, () => {
    console.log(this.state.boardAddModalShow);
  });
}
ログイン後にコピー

setState の非同期性質

React は、状態の変更をバッチ処理することでパフォーマンスを向上させるために延期します。この最適化により、不必要な再レンダリングが防止され、よりスムーズなユーザー エクスペリエンスが保証されます。

React ドキュメントで述べられているように:

「setState() は this.state をすぐに変更しませんが、保留中の状態遷移を作成します」このメソッドを呼び出した後に this.state にアクセスすると、既存の値が返される可能性があります。setState への呼び出しの同期操作は保証されず、パフォーマンスのために呼び出しがバッチ化される場合があります。 "

なぜ非同期状態更新が必要ですか?

状態の変更は、コンポーネント全体の再レンダリングを必要とする計算コストのかかる操作になる可能性があるため、非同期状態更新が必要です。木。 setState を非同期にすることで、React は複数の状態更新をまとめてバッチ処理し、単一の再レンダリング サイクルで効率的に実行できます。この最適化により、過度の状態変化によって UI が応答しなくなるのを防ぎます。

以上がReact の setState が非同期であるのはなぜですか? 更新された状態に確実にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート