setup+ref+reactive は vue3 の応答性を実装します

setup+ref+reactive は vue3 の応答性を実装します

セットアップは、結合された API を記述するために使用されます。テンプレートが使用できるようにするには、内部データとメソッドを返す必要があります。以前の vue2 では、data によって返されたデータを双方向バインディングに直接使用できました。setup 内のデータ型を双方向バインディングに直接バインドすると、変数がリアルタイムで応答できないことがわかります。次に、セットアップがデータの応答性をどのように実装するかを見てみましょう。

1. 参照

セットアップ内のカスタム属性はレスポンシブではないため、ref が導入されています。ref は、プロキシを介して属性値をプロキシにラップします。プロキシにはオブジェクトが含まれており、これにより基本的なタイプのデータがレスポンシブになります。使用する前に導入する必要があります。

例1: refの使用

<テンプレート>
 <div>
  <input type="text" v-model="気分">
  {{気分}}
 </div>
</テンプレート>
<スクリプト>
「vue」から{ref}をインポートします
エクスポートデフォルト{
 設定(){
  let mood = ref("私は今、機嫌が悪いです!")
  タイムアウトを設定します(()=>{
   mood.value = "気分は人と同じくらい美しくなるべきです"
  },3000)
  戻る {
   気分
  }
 }
}
</スクリプト>

この時点で、セットアップ テンプレートでムードを自由に編集して、リアルタイムの応答を確保できます。この例では、ref が次のように動作するため、気分値を変更するときに値が追加されます。

let mood = ref("私は今、機嫌が悪いです!")

次のように変更します: let mood = proxy({value:"私は今、機嫌が悪いです!"})

反応的

上記の ref は基本データ型をレスポンシブにしますが、参照型データに変更すると失敗します。そこで、リアクティブが導入されました。

Reactive は、基盤となるパッケージングを通じて参照型データをプロキシにラップします。使用原則は次のとおりです。

let me = 反応的({
 シングル:true、
 欲しいもの:「ストーブのように温かい人」
})

// 結果は let me = proxy : { single: true, want:"ストーブのように暖かい温かい男" }

引用するときは、me.want を使用してください。

例2: 反応的な使用

<テンプレート>
 <div>
  {{私.want}}
 </div>
</テンプレート>
<スクリプト>
「vue」から{ref、reactive}をインポートします。
エクスポートデフォルト{
 設定(){
  let me = 反応的({
   シングル:true、
   欲しいもの:「ストーブのように温かい人」
  })
  タイムアウトを設定します(()=>{
   me.want = 「夏は溶けやすい」
  },3000)
  戻る {
   自分
  }
 }
}
</スクリプト>

vue2 のデータの応答性は、setup + ref + reactive を通じて完全に実現できるため、setup はデータを完全に置き換えることができます。

3. toRefs と toRef アプリケーション

setup + ref + reactive はデータの応答性を実装し、ES6 の構造化分解は使用できないため、応答性が失われます。したがって、toRefs の分解が必要であり、使用時に最初に導入する必要があります。

動作は次のように行われます。

「vue」から ref、reactive、toRefs をインポートします。
let me = 反応的({
 シングル:true、
 欲しいもの:「ストーブのように温かい人」
})
// 実行 let me = proxy : { single: true, want:"ストーブのように暖かい男" }

const { single, want } = toRefs( me )
// 単一として実行: proxy({ value:true })
欲しいもの:proxy({ value:"ストーブのように暖かい男" })

toRefs は単一のプロキシと 2 つのプロキシに分解するため、応答性が高くなります。

例3: toRefsによるデータの分解

<テンプレート>
 <div>
  {{欲しい}}
  <input type="text" v-model="want">
 </div>
</テンプレート>
<スクリプト>
「vue」から ref、reactive、toRefs をインポートします。
エクスポートデフォルト{
 設定(){
  let me = 反応的({
   シングル:true、
   欲しいもの:「ストーブのように温かい人」
  })
  タイムアウトを設定します(()=>{
   me.want = 「夏は溶けやすい」
  },3000)
  // 分解 const {single,want} = toRefs(me)
   戻る {
    シングル、
    欲しい
   }
  }
}
</スクリプト>

toRef 関数: オブジェクトのプロパティを参照として返します。わかりにくいですが、結果を印刷して表示すると理解しやすくなります。

let me = 反応的({
 シングル:true、
 欲しいもの:「ストーブのように温かい人」
})
lv = toRef(私、'愛')とします。
console.log('愛',愛);
//結果を印刷する ObjectRefImpl {
 __v_isRef: 真
 _key: 「愛」
 _object: プロキシ {single: true、want: "ストーブのように暖かい男性"}
 値: 未定義
 [[プロトタイプ]]: オブジェクト
}

toRef は、コンポーネント間で値を渡したり、オプションのパラメータを処理したりするために使用されます。実行すると、まず、愛が me に存在するかどうかを確認します。存在する場合は、愛を me に継承します。存在しない場合は、愛を作成し、それを分解して変数 lv に割り当てます。

例4: toRefの使用

<テンプレート>
 <div>
  {{欲しい}}
 <input type="text" v-model="want">
</div>
</テンプレート>
<スクリプト>
「vue」から { ref 、 reactive 、 toRefs 、 toRef } をインポートします。
エクスポートデフォルト{
 設定(){
  let me = 反応的({
   シングル:true、
   欲しいもの:「ストーブのように温かい人」
  })
 タイムアウトを設定します(()=>{
  me.want = 「夏は溶けやすい」
 },3000)
 const { single, want } = toRefs(me)
 const 愛 = toRef(私、'愛')
 console.log('愛',愛);
 戻る {
  シングル、
  欲しい
  }
 }
}
</スクリプト>

IV. 結論

ref は基本データ型をレスポンシブにしますが、reactive は参照型データをレスポンシブにします。 setup + ref + reactive は、vue2 のデータ応答機能を完全に実装します。

toRefs はリアクティブにラップされたデータを分解し、toRef はオプションのパラメータに使用されます。

以上、setup+ref+reactive を通じて vue3 のレスポンシブ機能を実現する方法についてご紹介しました。参考になれば幸いです。また、123WORDPRESS.COM ウェブサイトをサポートしてくださっている皆様にも感謝申し上げます。

以下もご興味があるかもしれません:
  • Vue3でリアクティブに直接値を割り当てることができない問題の解決方法
  • vue3 のリアクティブ割り当て問題について
  • Vue3 におけるリアクティブ関数宣言配列メソッド
  • Vue3 のリアクティブの詳細な理解
  • Vue3 の ref、computed、reactive、toRefs をご存知ですか?
  • Vue3 でリアクティブデータを再割り当てした後の双方向バインディングの問題の解決

<<:  HTML <!--...--> コメントタグの役割の詳細な分析

>>:  IE で UTF8 エンコードされたページで行が理由もなく空白のままになり、UTF8 ページが表示されない問題の解決方法

推薦する

WeChatアプレットコンポーネントライフサイクルの落とし穴の記録

通常、コンポーネントのライフサイクルは、ビジネス ロジックが始まる場所です。ビジネスシナリオが複雑で...

docker に nacos をインストールしてデータベースを構成する詳細なチュートリアル

環境の準備 Docker環境 MySQL 5.7 (公式イメージはmysql8をサポートしていません...

Ubuntu 20.04 に Python 3 仮想環境をインストールする詳細なチュートリアル

以下はすべて仮想マシン上で実行されます1. pip3をインストールするsudo apt で pyth...

IIS7 IIS8 リバースプロキシルールの記述、インストール、構成方法

目的: ステーションAをステーションBのセカンダリディレクトリとして扱うのように: http://w...

MySQLチュートリアルではストアドプロシージャを徹底的に理解します

目次1. ストアドプロシージャに関連する概念2. ストアドプロシージャの使用1) ストアドプロシージ...

挿入前にレコードが既に存在するかどうかを確認するには、SQL ステートメントを使用します。

目次SQL文を挿入する前にレコードが既に存在するかどうかを確認するSQL挿入時の判断の簡単なコレクシ...

MySQL トランザクション分離レベルの詳細

serializableシリアル化(問題なし)トランザクションは順次実行する必要があります。前のトラ...

1つの記事でJavaScript DOM操作の基本を学ぶ

DOM の概念DOM: ドキュメント オブジェクト モデル: ドキュメント オブジェクト モデルは、...

SQL IDENTITY_INSERT ケーススタディ

一般的に、データ テーブル内の列を ID 列として設定すると、ID 列の表示値を手動で ID 列に挿...

mysql 5.7.11 winx64 初期パスワード変更

公式サイトからMySQL-5.7.11-winx64の圧縮版をダウンロード。インストール後、パスワー...

vscode dockerプラグインのdocker.socket権限問題を解決する

解決策: システム内のすべての .vscode 関連プロセスを終了します (または、remote-s...

mysql のファイル mysql-bin.000001 とは何ですか? 削除できますか?

ポートを使用して MySQL をインストールした後、しばらくすると /var の容量が不足しているこ...

JS はシンプルなブロック崩しピンボールゲームを実装します

この記事では、ブロック崩しピンボールゲームを実装するためのJSの具体的なコードを参考までに紹介します...

JavaScript配列の一般的なメソッドの例のまとめ

目次一般的な配列メソッドconcat() メソッドjoin() メソッドpop() メソッドpush...

JS は VUE コンポーネントに基づいて都市リスト効果を実装します

この記事の例では、VUEコンポーネントに基づいて都市リストエフェクトを実装するための具体的なコードを...