setStateを使用する理由React 開発のプロセスでは、コンポーネントの状態を処理することが不可欠です。 React を使用したことがある人なら誰でも、状態の値を変更する場合は、内部的に提供される setState メソッドを使用する必要があることを知っています。割り当てを使用して状態の値を直接変更できないのはなぜですか?まずは分析してデモを見てみましょう。 クラス Index は React.Component を拡張します { この状態 = { カウント: 0 } クリック時 = () => { this.setState({ カウント: 10 }) } 与える() { 戻る ( <div> <span>{this.state.count}</span> <button onClick={this.onClick}>クリック</button> </div> ) } } 上記のコードによれば、ボタンをクリックすると、state の count の値が 10 に変更されることがわかります。ページの表示を更新します。したがって、状態の変更には、対応する値の変更とページの更新という 2 つの効果があります。 **これら 2 つのポイントを実現するには、React で setState が必要です。 onClick メソッドの内容を
☆拡大するには: Vue では、データの更新に直接割り当てが使用され、Vue は最新のデータを使用してページをレンダリングすることもできます。これはなぜでしょうか? vue2 では、データの変更を監視するために、Object.defineProperty() を使用してデータの get メソッドと set メソッドを監視します。vue3 では、データの変更を監視するために ES6 プロキシが使用されます。 setStateの使用法setState の使い方は皆さんご存知だと思いますが、ここでも記録しておきます。setState メソッドには 2 つのパラメーターがあります。最初のパラメーターは、プロパティ値を直接変更するオブジェクトにすることも、以前の状態値を取得できる関数にすることもできます。 2 番目のパラメータは、最新の状態値を取得できるオプションのコールバック関数です。コールバック関数は、コンポーネントの更新が完了した後に実行されます。これは、
this.setState({ キー:newState })
// prevState は前の状態、props はこの更新が適用されたときのプロパティです this.setState((前の状態、props) => { 戻る { キー: prevState.key } }) 非同期または同期更新
まずは上記のコードを修正してみましょう。前述のように、onClick メソッドで setState が 3 回連続して呼び出される場合、setState は非同期メソッドです。各呼び出しでは、変更がキューに追加されるだけです。同期的に呼び出すと、最後の更新のみが実行されるため、結果は 3 ではなく 1 になります。 クリック時 = () => { const { count } = this.state this.setState({ count: count + 1 }) this.setState({ count: count + 1 }) this.setState({ count: count + 1 }) } 上記のコードは オブジェクト.assign() 州、 { カウント: 状態.count + 1 }, { カウント: 状態.count + 1 }, { カウント: 状態数 + 1 } ) 関数が最初のパラメータとして渡され、3 回連続して呼び出された場合、結果はオブジェクトとして渡した場合と同じになりますか? クリック時 = () => { this.setState((前の状態、props) => { 戻る { カウント: prevState.count + 1 } }) this.setState((前の状態、props) => { 戻る { カウント: prevState.count + 1 } }) this.setState((前の状態、props) => { 戻る { カウント: prevState.count + 1 } }) } オブジェクトを渡す方法とは全く異なる結果になります。関数メソッドを使用すると、3 増加の効果が得られます。これはなぜでしょうか? 関数内で最新の状態とプロパティの値を取得できます。上記から、setState がバッチで更新されていることがわかります。関数を使用すると、現在の状態が以前の状態に基づいていることが保証されるため、3 ずつ自己増加させる効果が得られます。 ☆まとめ: setState メソッドが非同期なのはなぜでしょうか?
**すべての setStates は非同期ですか? **答えはイエスです! ! ! React で setState が同期されるシナリオもあります。 クリック時 = () => { this.setState({ count: this.state.count + 1 }) コンソールログ(この状態) タイムアウトを設定する(() => { this.setState({ count: this.state.count + 1 }) コンソールログ(この状態) }, 0) } 上記のコードは **0, 2 を出力します。 **これはなぜでしょうか?実際、React の setState は厳密な意味では非同期関数ではありません。これはキューの遅延実行を通じて実装されます。 React は ☆setStateは同期シナリオではありませんが、特別なシナリオではReactによって制御されません** 要約するsetState は単純な同期関数でも非同期関数でもありません。同期と非同期のパフォーマンスの違いは、呼び出しシナリオの違いに反映されます。これは、React のライフサイクルおよび合成イベント内で非同期関数として動作します。 DOM のネイティブ イベントなどの非合成イベントでは、同期関数として表示されます。 以上がReact setStateデータ更新メカニズムの詳細な説明です。React setStateデータ更新メカニズムの詳細については、123WORDPRESS.COMの他の関連記事に注目してください。 以下もご興味があるかもしれません:
|
<<: JDBC が MySQL に接続して中国語を処理するときに文字化けする問題の解決方法の詳細説明
>>: Ubuntu 18.04 向け VMware Tools のインストールと構成のチュートリアル
序文要件を満たす特定のデータをデータベースから取得する必要があります。Select ABC FROM...
CSS を使用して 3D フォト ウォールを作成します。具体的なコードは次のとおりです。 <!...
目次再帰とは何ですか?また、どのように機能しますか? 1. 合計(1)デジタル加算(2)配列の和2....
ハードウェア上の理由により、機械は標準時間にある程度追いつけない場合があり、その誤差は 1 か月で数...
最近はMySQLのパフォーマンス最適化についても研究しているので、今日の投稿は勉強ノートとしても使え...
表のキャプションは表の上または下に配置でき、プロパティで調整できます。デフォルトのテーブル タイトル...
目次1 SSHとは何か2 SSHパスワードフリーログインを設定する2.1 必要なソフトウェアのインス...
序文Linux が完全にセットアップされると、クローン機能を使用して短時間で複数の Linux を作...
目次ブラウザカーネルJavaScript エンジンV8エンジンJavaScript がどのように実行...
1. ノードサーバーのセットアップ + データベース接続ここでの操作は比較的簡単でわかりやすいです。...
最近、特に異常なビジネス需要があり、テーブルがあります テーブル「デモ」を作成します( `id` i...
Linux システムで iso ファイルをインストールするにはどうすればいいですか?インストール手順...
<br />ページに <img src=""> が含まれ...
カーソルカーソルは、結果セット内のデータを表示または処理するために使用される方法です。カーソルを使用...
ソースコードプレビュー: https://github.com/jdf2e/nutui NutUI ...