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 を実装する方法

前回の記事では、入力完了の簡単な検出を実現しましたが、今回はさらに一歩進んで、入力が完了した後に次の...

MySQL 8.0.3 RCがリリースされようとしています。変更点を見てみましょう。

MySQL 8.0.3がリリースされます。新機能を見てみましょうMySQL 8.0.3 は RC ...

モバイルデバイス上のぼやけた小さなアイコンの問題を解決する方法

序文以前、画像とテキストの垂直方向のずれの問題について説明しました。ここで示した小さな例では、小さな...

Mysql マルチテーブル結合クエリの実行の詳細について簡単に説明します。

まず、このブログのケースデモンストレーション テーブルを作成します。 create table a(...

MySql における無効な Null セグメント判定と IFNULL() 失敗の解決策

MySql Nullフィールド判定とIFNULL失敗処理ps: (プロセスを表示したくない場合は、S...

単一/複数行テキストを含む div を垂直方向に中央揃えする N 通りの方法 (高さ不明/高さ固定)

この問題について話すとき、垂直方向の中央揃えを設定するための vertical-align 属性が ...

HTML 選択オプション デフォルトの選択方法

オプションに属性 selected = "selected" を追加すると、それ...

CSSは、入力ボックスのフローティングテキスト効果を実現するために、placeholder-shown疑似クラスを使用します。

この記事では、:placeholder-shown 疑似クラスを使用して、純粋な CSS で浮動疑問...

MySQL並列レプリケーションの簡単な説明

1. 並列レプリケーションの背景まず、並列レプリケーションの概念はなぜ存在するのでしょうか? 1. ...

MySQLはgroup_concat()関数に基づいて複数のデータ行を結合します

非常に便利な機能group_concat() について、マニュアルには次のように記載されています: ...

ウェブデザイナー職の面接でよくある質問と回答

1. ASP.NET Web アプリケーションのテンプレートとは何ですか? それらの違いは何ですか?...

VMware での Linux CentOS6.9 インストール グラフィック チュートリアル

技術初心者として、初めて Linux システムをインストールするプロセスを記録しています。まず、Wi...

Linux に MySql 5.7.21 をインストールするための詳細な手順

序文Linux で最も広く使用されているデータベースは MySQL です。この記事では、Linux ...

Windows10 mysql 8.0.12 非インストール版 設定 起動方法

この記事では、MySQL 8.0.12のインストールされていないバージョンを設定して起動するための具...

geo モジュールを使用して Nginx でホワイトリストを設定する例

元の構成: http { ...... limit_conn_zone $binary_remote...