Vueのレスポンシブシステムの原理の詳細な説明

Vueのレスポンシブシステムの原理の詳細な説明

Vueのレスポンシブシステムの基本原則

vue を使用すると、データを操作して対応するビューに影響を与えることができます。では、このメカニズムはどのように実装されるのでしょうか?

考えてみてください。私たちのデータ操作は「誰か」によって監視されているようなものではないでしょうか。データに変更を加えると、「誰か」がそれを感知し、ビューの更新を手伝ってくれる。

では、この「誰か」とは誰なのでしょうか?実は、これは非常に一般的です。基礎編で学んだ Object.defineProperty です。これを使用してデータを処理することで、データを読み取るときの「読み取り」コールバック関数と、データを書き込むときの「書き込み」コールバック関数を実装できます。

次に、この方法の使用法を簡単に確認し、この原則を完全に理解できるようにいくつかの実用的な例を使用します。

1. Object.definePropertyの使い方を確認する

パラメータの説明:

	obj: 対象オブジェクト prop: 操作対象となる対象オブジェクトのプロパティ名 description: 記述子	
	オブジェクトに渡された戻り値

記述子のいくつかの属性。いくつかの属性を簡単に紹介します。

	enumerable、プロパティが列挙可能かどうか。デフォルト値は false です。
	プロパティを変更または削除できるかどうかを構成可能。デフォルト値は false です。
	書き込み可能、​​プロパティが変更可能かどうか、デフォルト値は false
	get、属性を取得するメソッド。
	set、プロパティを設定するメソッド。

完全な使用方法:

	オブジェクト.defineProperty(obj, prop, 記述子)

2. 練習1: Object.definePropertyを使用して人の年齢プロパティを監視する

落とし穴

以下のコードを見てください。一見、何も問題がないように見えますか?

誰かが person の age 属性を読み取ると、 person の age 属性を返します。誰かが person の age 属性を変更すると、 person.age の値を直接変更します。

ここに画像の説明を挿入

しかし!学生の皆さん、実行した後、エラーは発生しませんが、コンパイラは「@@Someone read the age property」を出力し続けます。

ここに画像の説明を挿入

これはなぜでしょうか?考えてみてください。get 関数で person.age を直接返すと、これは人物の age 属性を再度読み取ることになりますか?このとき、プログラムは age の get 関数を何度も繰り返し実行します。

たとえば、これは、age を読み取りたいので、コンパイラーに person.age を出力したいと伝えるのと同じです。コンパイラーは person.age をチェックし、get 関数があることを発見したので、get 関数を実行します。この時点で、その値を取得することになると思いますが、get 関数が再びコンパイラーに person.age が欲しいと伝えるとは予想していませんでした。こうして悪循環が形成されます! !

それで、どうやって解決するのでしょうか? get で person.age を直接返すことはできないので、この属性の値を取得するにはどうすればよいでしょうか?

回答:変数に置き換えることはできますか?

person.age の値を変数 ageNumber に格納します。値を読み取る場合は ageNumber の値を返し、値を変更する場合は ageNumber の値を変更します。

これにより、get 関数と set 関数で person.age を直接使用してアクセスする必要がなくなるのではないでしょうか。

正しいコード

ここに画像の説明を挿入

この時点で効果は完了しており、読み取りおよび変更時に監視できます。

ここに画像の説明を挿入

3. データブローカー

データブローカーとはどういう意味ですか?

A:簡単に言うと、オブジェクトプロキシを介して別のオブジェクトのプロパティを操作(読み取り/書き込み)することです。

ちょっと抽象的ですよね?次の小さな例でこれを説明しましょう。

ここに画像の説明を挿入

ここに画像の説明を挿入

教師が生徒の成績を確認または変更したい場合、生徒オブジェクトを直接操作することなく、教師オブジェクトを直接操作できます。

上記で説明したいのは、教師オブジェクト(teacher)が生徒オブジェクト(student)のスコア属性(score)の操作(読み取り/書き込み)を委譲するということです。

4. Vueでレスポンシブ思考を実装する

Vue2 の基本的な知識がある学生は、Vue の data() {} で定義されたデータが vm オブジェクトにマウントされることを知っている必要があります。次に、this.data という名前を通じてデータを操作します。

これは、上記の小さな例のシナリオと同等でしょうか? ここで、vm オブジェクトは、定義したデータ オブジェクト内の属性の操作 (読み取り/書き込み) をプロキシします。

Vue のレスポンシブ原則を完全に実装するために別の例を使用しましょう。

データオブジェクト内のすべての属性をプロキシのVMオブジェクトに渡します(VMにデータオブジェクト内の属性の(読み取り/書き込み)操作を制御させます)。データが変更されると、対応するビューを更新できます。

要約する

1. Vue のデータプロキシ:

vmオブジェクトを使用して、データオブジェクト内の属性の操作(読み取り/書き込み)をプロキシします。

2. Vue のデータプロキシの利点:

データ内のデータのより便利な操作

3. 基本原則:

Object.defineProperty()を使用して、データ オブジェクト内のすべてのプロパティを vm に追加します。

VM に追加される各プロパティに対して、ゲッター/セッターを指定します。

getter/setter内のデータ内の対応する属性を操作 (読み取り/書き込み) します。

4. Vueでレスポンシブ思考を実装する

データ プロキシを使用せずに、データは VM に直接割り当てられ、マウントされます。

1. 下の図の方法は、データオブジェクトのgetとsetを設定するための一般的な方法です。

ここに画像の説明を挿入

2. 新しいVueを作成すると、ユーザーが渡したデータオブジェクトがVueインスタンスに直接マウントされます。

次に、Vueインスタンス上のデータオブジェクトを監視します(レスポンシブ処理)

ここに画像の説明を挿入

ここに画像の説明を挿入

この記事はこれで終わりです。皆さんのお役に立てれば幸いです。また、123WORDPRESS.COM のその他のコンテンツにも注目していただければ幸いです。

以下もご興味があるかもしれません:
  • Vueにおけるv-modelと応答性の実装原理の分析
  • Vue の応答性原則の詳細な例
  • Vue3.0 レスポンシブ機能の原理の詳細
  • Vue3のレスポンシブ原則の詳細な説明
  • VUE 応答性原理の詳細な説明
  • VUE レスポンシブ原則の実装の詳細な説明

<<:  Linux で FastDFS を使用してイメージ サーバーを構築する

>>:  MySQL はカスタムシーケンスを使用して row_number 関数を実装します (詳細な手順)

推薦する

HTML 特殊文字変換表

キャラクター小数点文字番号エンティティ名---未使用空間---スペースバー! ! ---感嘆符「 」...

WeChat アプレット計算機の例

WeChatアプレット計算機の例、参考までに、具体的な内容は次のとおりです。インデックス.wxml ...

JavaScriptは検証コードと検証のランダム生成を実装します

この記事では、検証コードのランダム生成と検証を実現するためのJavaScriptの具体的なコードを参...

Nginx 仮想ホスト (IP ベース) を構成する 3 つの方法の詳細な説明

Nginx は、IP ベースの仮想ホスト構成、ポート ベースの仮想ホスト構成、ドメイン名ベースの仮想...

MySQLトランザクション処理の使用方法とサンプルコードの詳細な説明

MySQL トランザクション サポートは、MySQL サーバー自体にバインドされているのではなく、ス...

つまり、フィルターコレクション

IE は開発の初期段階では頭を悩ませましたが、他のブラウザとは異なります。他のブラウザがサポートして...

DockerでKafkaをデプロイする方法

目次1. Dockerをビルドする2. コンテナに入る3. 設定ファイルを変更する4. Kafkaを...

Vue ページに img 画像を導入する方法

HTMLを学ぶとき、画像タグ<img>は画像を導入します <img src=&qu...

CSSでプロセスナビゲーション効果を実現する(3つの方法)

CSS によりプロセスナビゲーション効果を実現します。具体的な内容は以下のとおりです。 ::tip...

Linuxでディスクをマウントする方法

仮想マシンを使用しているときに、ディスク容量が不足し、継続使用するためにディスクをマウントする必要が...

Linux でファイアウォールがオフになっているかどうかを確認する方法

1. サービス方法ファイアウォールのステータスを確認します。 [root@centos6 ~]# サ...

インスピレーションを得るための7つのクールなダイナミックウェブサイトデザイン

デザインの分野では、毎年さまざまなデザインのトレンドや流行があります。たとえば、近年のレスポンシブデ...

Linuxは数字当てゲームのソースコードを実装する

シンプルな Linux 推測ゲームのソースコードゲームのルール:数字当てゲームは通常 2 人でプレイ...

Vue+Openlayer をベースに geojson を動的に読み込む方法

1つ以上の機能をロードする <テンプレート> <div id="map&...

WIN10 システムと Docker 内部コンテナ IP 間の通信方法

1. Windows 版の Docker をインストールしたら、Docker クイックスタート ター...