Vue のレスポンシブ原則と双方向データの詳細な分析

Vue のレスポンシブ原則と双方向データの詳細な分析

応答性を実現するための object.defineProperty の理解

observe/watcher/depが何を指すのかを知る

パブリッシュ・サブスクライブモデルとそれが解決する特定の問題を理解する

一般的に、Javascript でデータ応答性を実装するには、それぞれ vue2.x と vue3.x で使用されるメソッドに対応する 2 つのソリューションがあります。これらは次のとおりです。

オブジェクトプロパティインターセプション (vue2.x) Object.defineProperty
オブジェクト プロキシ (vue3.x)

ヒント:以下はこの記事の主な内容です。以下のケースを参考にしてください。

vue-responsive とは何ですか?

Vue の最もユニークな機能の 1 つは、非侵入的なリアクティブ システムです。データ モデルは単なる単純な JavaScript オブジェクトです。変更すると、ビューが更新されます。これにより、状態管理は非常に簡単になりますが、いくつかの一般的な問題を回避できるように、その仕組みを理解することが重要です。このセクションでは、

Vue の応答性システムの低レベルの詳細。

Vue のレスポンシブ性を実装するにはどうすればいいですか?

データの応答性: データモデルは通常の JavaScript オブジェクトに過ぎず、データを変更するとビューが更新されるため、頻繁な DOM 操作が回避され、開発効率が向上します。これは、DOM を頻繁に操作する Jquery とは異なります。

双方向データバインディングを理解する

データが変更されるとビューが変更され、ビューが変更されるとそれに応じてデータが変更されます(この文から、双方向バインディングにはデータの応答性が含まれていることがわかります)

v-modelを使用してフォーム要素に双方向データバインディングを作成できます。

データ駆動はVueの最もユニークな機能の一つです

開発プロセス中は、データがビューにどのようにレンダリングされるかではなく、データ自体にのみ焦点を当てる必要があります。主流の MVVM フレームワークでは、データの応答性と双方向バインディングが実装されているため、データを DOM にバインドできます。

vue.js では、いわゆるデータ駆動型とは、データが変更されるとそれに応じてユーザー インターフェイスも変更され、開発者が DOM を手動で変更する必要がないことを意味します。

データ駆動の理解:

では、Vuejs はどのようにしてこのデータ駆動型のアプローチを実現するのでしょうか?

Vue は、主にデータ ハイジャックとパブリッシャー サブスクライバー モデルを組み合わせて双方向データ バインディングを実装し、Object.defineProperty() を介して各属性のセッターとゲッターをハイジャックし、データが変更されたときにサブスクライバーにメッセージをパブリッシュし、対応する監視コールバックをトリガーします。プレーンな JavaScript オブジェクトをデータ オプションとして Vue インスタンスに渡すと、Vue はそのプロパティを反復処理し、Object.defineProperty を使用してそれらをゲッター/セッターに変換します。ゲッター/セッターはユーザーには表示されませんが、内部的には Vue が依存関係を追跡し、プロパティがアクセスされて変更されたときに変更を通知できるようにします。

Vueの双方向データバインディング

MVVM をデータ バインディングのエントリ ポイントとして使用し、Observer、Compile、Watcher を統合し、Observer を使用して独自のモデルのデータ変更を監視し、Compile を使用してコンパイル テンプレート命令 (Vue の {{}} を解析するために使用される) を解析し、最後に Watcher を使用してオブザーバーと Compile の間に通信ブリッジを構築し、データ変更 -> ビューの更新、ビューのインタラクション変更 (入力) -> データ モデルの変更という双方向のバインディング効果を実現します。

vue-双方向データの分析? /v-model 双方向データバインディングの原理

コードは次のとおりです(例):

  <スクリプト>
    // オブジェクトの大文字と小文字の値の書き込み let data = {
      名前: '李白'、
      年齢: 18
    }

    Object.keys(data).forEach(キー => {
      defineReactiveProperty(データ、キー、データ[キー])
    })

    関数defineReactiveProperty(データ、キー、値) {
      Object.defineProperty(データ、キー、{
        // 得る() {
          戻り値
        },
        // 値を設定する set(newVaue) {
          if (newVaue === 値) {
            戻る
          }
          値 = 新しい値
          コンパイル()
        }
      })
    }
    コンパイル()
  </スクリプト>
</本文>

</html>
 
 関数コンパイル(){
  // document.querySelect('#app').childNodes を通じて app の下にあるすべての子要素を取得します。const nodes = document.querySelector('#app').childNodes
  // この値を出力します。現在の値はネストされた配列です。foreachを使用します 
  // コンソール.log(ノード)

  ノード.forEach(アイテム => {
    // 出力項目を再度 html:49 <input type=​"text" v-model=​"name">​ は入力ボックスです // console.log(item)
    // 現在のラベルを除外します。ノードの出力ではスペースを 'text' nodeType 3 として使用し、ラベル nodetype は 1 であるため、ラベルであると判断されます。if (item.nodeType === 1) {
     定数 attrs = アイテム.属性
      // console.log(attrs) {0: type, 1: v-model, type: type, v-model: v-model, length: 2} は配列を返します Array.from(attrs).forEach(arr => {
        // console.log(arr) // texgt= 'text' v-mode: 'name' 、この v-model を除外します
        (arr.nodeName === 'v-model')の場合{
            アイテム値 = データ[arr.nodeValue]
            アイテム.addEventListener('input',e => {
              console.log(e.target.value)
              //  
              データ[arr.nodeValue] = e.target.value
            })
        }
      })
   }
  })
}

要約する

  • データ応答性の実装は、オブジェクト プロパティのインターセプションに他なりません。これを実装するには Object.defineProperty を使用し、最適化のために vue3 の Proxy オブジェクト プロキシ ソリューションを使用します。
  • 面接ガイドに記載されているいくつかの専門用語
    観察オブジェクトは、データを応答オブジェクトに処理するオブジェクトです。
    ウォッチャーは実際にはデータ変更後の更新機能を指します (Vue には 2 種類のウォッチャーがあり、1 つはビューの更新に使用されるウォッチャーで、もう 1 つはウォッチ構成項目を通じて宣言されるウォッチャーです)
    depは、パブリッシュとサブスクライブを使用して実装された更新関数を収集し、更新関数をトリガーするオブジェクトを指します。
  • 命令実装の核となるのは、テンプレートのコンパイルを通じて識別子を見つけ、それにデータをバインドし、データの変更後にそれを再度配置することだけです。
  • パブリッシュ/サブスクライブ モデルの本質は、1 対多の問題を解決し、Vue でデータが変更された後に正確な更新を実装することです。

Vue のレスポンシブ原則と双方向データに関するこの記事はこれで終わりです。Vue のレスポンシブ原則と双方向データに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • VUE 応答性原理の詳細な説明
  • レスポンシブ原則のソースコード分析のVue解釈
  • レスポンシブ原則をシミュレートするための基礎コードの Vue 実装の例
  • レスポンシブ原則と Vue2.0/3.0 の違いについての簡単な分析
  • Vueのデータ応答性原則の詳細な説明
  • Vue の応答性原則の詳細な分析
  • Vue3のレスポンシブ原則の詳細な説明

<<:  Bツリーの削除プロセスの紹介

>>:  VMware Workstation Pro が Win10 アップデートにより開けなくなる問題の解決方法

推薦する

IE6 の iframe の水平スクロール バーの解決策

状況は以下のとおりです: (PS: 赤いボックスは iframe 領域を表し、灰色の四角形は上記の ...

Linux Samba サーバーの超詳細なインストールと構成 (問題解決付き)

目次Samba サーバーの紹介Samba サーバー コンポーネントSamba サーバー関連の設定ファ...

CSS の高さの崩壊問題の解決

1. 崩壊度が高いドキュメント フローでは、親要素の高さはデフォルトで子要素によって拡張されます。つ...

Winにmysqlをインストールする詳細な手順

この記事では、参考までにWinにmysqlをインストールする詳細な手順を紹介します。具体的な内容は次...

mysql 8.0.19 winx64.zip インストール チュートリアル

この記事は参考までにmysql 8.0.19 winx64.zipのインストールチュートリアルを記録...

nginx+lua を使用した単一マシンでの何万もの同時接続の実装

nginx は弊社で最もよく使用されるサーバーで、コンテンツ配信やリバース プロキシによく使用されま...

HTML テーブルタグチュートリアル (35): 列間属性 COLSPAN

複雑なテーブル構造では、一部のセルが垂直方向に複数のセルにまたがるため、列間属性 COLSPAN を...

JavaScript のドキュメント オブジェクト モデル (DOM)

目次1. DOMとは何か2. 要素を選択する3. getElementById() 4. クエリセレ...

mysql explain(分析インデックス)の使い方の詳しい説明

EXPLAIN は、MySQL がインデックスを使用して選択ステートメントを処理し、テーブルを結合す...

WeChatアプレットは写真アップロード機能を実現

この記事の例では、WeChatアプレットで写真をアップロードするための具体的なコードを参考までに共有...

MySQL 5.7.18 zip バージョンのインストール チュートリアル

MySQL の mysql 5.7.18 zip バージョンは、クリックして次のステップをクリックし...

Linux での MySQL 5.6.27 インストール チュートリアル

この記事では、LinuxでのMySQL 5.6.27のインストールチュートリアルを参考までに紹介しま...

MySQLとPythonの相互作用の例

目次1. データを準備するデータテーブルを作成するデータの挿入2. SQLドリル1. SQL文の強化...

node_modulesを削除して再インストールする方法

目次ステップ1: プロジェクトをインストールするディレクトリにnode_modulesをインストール...