ホームページ > ウェブフロントエンド > jsチュートリアル > `setState()` が React のコンポーネントの状態をすぐに更新しないのはなぜですか?

`setState()` が React のコンポーネントの状態をすぐに更新しないのはなぜですか?

Mary-Kate Olsen
リリース: 2025-01-04 18:01:39
オリジナル
204 人が閲覧しました

Why Doesn't `setState()` Immediately Update React's Component State?

React の状態管理: setState() の非同期の性質を理解する

React では、コンポーネントの状態を更新するために setState() メソッドが使用されます。ただし、よくある誤解の 1 つは、setState() が状態を即座に変更するということです。これは当てはまりません。

setState() の非同期の性質を理解する

React のドキュメントには、「setState() は this.state をすぐには変更しませんが、保留中の状態遷移を作成します。」と明確に記載されています。これは、setState() を呼び出した後でも、this.state にアクセスすると既存の値を返すことができることを意味します。 React では、効率を高めるために複数の setState() 呼び出しをバッチ処理できるため、パフォーマンスの最適化のためにこの動作が許可されています。

非同期動作の観察

React のドキュメントの Forms セクションにある次のコード スニペットを検討してください。

handleChange: function(event) {
    console.log(this.state.value);
    this.setState({value: event.target.value});
    console.log(this.state.value);
},
ログイン後にコピー

ブラウザで入力値を更新すると、両方の console.log ステートメントが出力されることに気づくでしょう。同じ値です。この動作は、setState() の非同期の性質を示しています。最初の console.log には初期状態の値が表示されますが、2 番目のログには setState() を使用して更新したにもかかわらず同じ値が表示されます。

状態変更後のコードの実行

必要な場合状態変更が発生した後にコードを実行するために、React は次の解決策を提供します。

this.setState({value: event.target.value}, function() {
    console.log(this.state.value);
});
ログイン後にコピー

この場合、setState() に渡されたコールバックが実行されます。状態の更新が完了すると、console.log に更新された状態値が確実に出力されます。

以上が`setState()` が React のコンポーネントの状態をすぐに更新しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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