Vue3 の ref と toRef の違いを簡単に分析します

Vue3 の ref と toRef の違いを簡単に分析します

1. refがコピーされ、ビューが更新されます

refを使用してオブジェクトのプロパティ値をレスポンシブデータに変換する場合

レスポンシブ データを変更しても元のデータには影響しません。

同時にビューも更新されます。

Ref はコピーを意味します。コピーしても元のデータには影響しません。

<テンプレート>
 <div>
    <div>
      <div>{{stateObj} </div>
       <button @click="func1">ボタン</button>
    </div>
 </div>
</テンプレート>
<スクリプト>
'vue' から {ref} をインポートします
エクスポートデフォルト{
  名前: 'アプリ'、
  設定(){
    let obj={name:"张三",age:22}
    
    // オブジェクト内のプロパティをレスポンシブ データに変換します // オブジェクトをレスポンシブ データに変換する代わりに let stateObj=ref(obj.name)
    関数func1(){
      stateObj.value="張三が李斯になる";
      //元のデータは変更されていません。元のデータ obj {name: "张三", age: 22}
      console.log("元のデータ obj",obj)

      // レスポンシブデータが変更されました/**
      レスポンシブ stateObj RefImpl {
          _rawValue: "張三が李思になる", _shallow: false,
          __v_isRef: true、_value: "張三が李四になる"
      }
      **/
      // ref オブジェクトになります console.log("responsive stateObj",stateObj)

    }

    {stateObj,func1} を返す
},
}
</スクリプト>

2. toRefは参照なので、ビューは更新されません

toRefを使用してオブジェクトのプロパティをレスポンシブデータに変換する場合

レスポンシブデータを変更すると、元のデータに影響します

データがtoRefを通じて作成された場合、値が変更された後、データはビューをトリガーしません。

toRefは参照です。前のオブジェクトのプロパティを参照します。

したがって、変更すると、元のデータの値に影響します。

<テンプレート>
 <div>
    <div>
      <div>{{状態}}</div>
       <button @click="func1">ボタン</button>
    </div>
 </div>
</テンプレート>
<スクリプト>
'vue' から { toRef } をインポートします
エクスポートデフォルト{
  名前: 'アプリ'、
  設定(){
    let obj={name:"张三",age:22}
    // オブジェクト内のプロパティ名をレスポンシブ データに変換します // オブジェクトをレスポンシブ データに変換する代わりに let state=toRef(obj, 'name');
    console.log('toRef',状態)
    関数func1(){
      state.value="私はLi Siです";
      コンソールログ('obj',obj)
      console.log('状態',状態)
    }
    {state,func1} を返す
  },
}
</スクリプト>

3. 結論

ref コピー、レスポンシブ データの変更、以前のデータには影響しませんが、インターフェイスは変更されます。

toRef 参照の場合、レスポンシブ データを変更すると以前のデータに影響し、インターフェイスは更新されません。

toRefの使用例

レスポンシブデータを元のデータに関連付けたい場合。

レスポンシブデータを更新した後、ビューを更新したくない場合は、toRefを使用できます。

まとめ:

refとtoRefの違い

(1)refの本質はコピーであり、応答データの変更は元のデータに影響を与えない。toRefの本質は参照関係であり、応答データの変更は元のデータに影響を与える。

(2)refデータが変更されると、インターフェースは自動的に更新される。toRefデータが変更されると、インターフェースは自動的に更新されない。

(3) toRefに渡されるrefは異なります。toRefは2つのパラメータを受け取ります。最初のパラメータはどのオブジェクトか、2番目のパラメータはオブジェクトのどの属性かです。

要約する

Vue3 の ref と toRef の違いについての記事はこれで終わりです。Vue3 の ref と toRef の違いについてさらに詳しく知りたい方は、123WORDPRESS.COM の過去記事を検索するか、以下の関連記事を引き続きご覧ください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • setup+ref+reactive は vue3 の応答性を実装します
  • Vueのref属性の詳細な説明
  • Vue3 の参照と参照の詳細
  • Vue3 のリアクティブ関数 toRef 関数 ref 関数の紹介
  • Vue.js $refs 使用例の説明
  • Vue3.0 における Ref と Reactive の違いの詳細な分析
  • Vue3 における ref と reactive の詳細な説明と拡張
  • Vue3 の組み合わせ API における setup、ref、reactive の完全な使用方法
  • Vue での ref の使用法とデモンストレーション

<<:  MySQL 8.0.15 のインストールと設定のグラフィックチュートリアル

>>:  CentOS7 では、MySQL8 のマスター スレーブ バックアップと毎日のスケジュールされたフル バックアップが有効になります (推奨)

推薦する

HTML テーブルインライン形式の詳細な説明

インライン形式<colgroup>...</colgroup>属性名 属性値...

Linuxカーネルマクロcontainer_ofの詳細な分析

1. 前述の通り数年前、Linux ドライバーのコードを読んでいたときにこのマクロを見ました。長い間...

中国語と英語のフォント名の比較表(FounderとArphicを含む)

CSS ファイルでは、フォント名が文字化けしていることがよくあります。これは、作成者が中国語フォン...

Vue マウスホイールスクロール切り替えルーティング効果を実装する方法

ルート ルーティング コンポーネント (アプリの下のルート ルーティング コンポーネント。子コンポー...

Linux 仮想メモリ設定のチュートリアルと実践

仮想メモリとは何ですか?まずはWikipediaからの紹介文をそのまま引用します。仮想メモリは、コン...

Linux/Mac MySQL パスワードを忘れた場合の対処方法

Linux/Mac の MySQL パスワードを忘れた場合はどうすればいいですか?心配しないでくださ...

Linuxブートサービスを起動する2つの方法

目次rc.local メソッドchkconfig メソッドrc.local メソッド1 まず自動的に...

例を通してBRタグとPタグの違いを理解する

<br />改行タグの使用<br>改行タグ<br>は終わりのない...

js に基づいて大きなファイルのアップロードとブレークポイントの再開を管理する方法

目次序文フロントエンド構造バックエンド構造(ノード+エクスプレス) FormDataに基づくファイル...

フロントエンドインタビューに必要なホモロジーとクロスドメインの詳細な説明

序文ご存知のとおり、ブラウザの相同性戦略とクロスドメイン方式も、フロントエンド面接で頻繁に遭遇する問...

MySQL フラッシュリストとダーティページフラッシュメカニズム

1. レビューMySQL の起動後にバッファ プールが初期化されます。バッファ プールは N 個の空...

Vueプラグインの実装で発生した問題の概要

目次シーン紹介プラグインの実装問題1: 重複したヘッダーコンポーネント質問2: 別の実装アイデア質問...

モバイルウェブページのサイズ調整を実装する方法

ようやく手元のプロジェクトが終了し、行方不明だった人たちが戻ってきました!プロジェクトを進める過程で...

Linux マルチスレッドにおけるフォークとミューテックス ロック プロセスの例

目次質問: 1. 最初の試み2. 合理的な分析3. 問題解決(1) pthread_join()の使...

Red Hat Enterprise Linux 8 をベースにした CentOS 8 が正式にリリースされました

CentOS プロジェクトは、Red Hat の再配布要件に完全に準拠した、Red Hat Ente...