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 アップデートにより開けなくなる問題の解決方法

推薦する

MySQLのマスタースレーブ構成を使用して、読み取りと書き込みの分離を実現し、データベースの負荷を軽減します。

大規模な Web サイトでは、多数の同時アクセスを処理するために、Web サイト上の分散負荷分散以上...

Docker環境を構築する簡単な方法

まず、Docker とは何かを理解しましょう。 Docker は、アプリケーションをデプロイするため...

MySQL が my.cnf を読み込む順序の詳細

目次MySQLがmy.cnfを読み込む順序1. mysql.server の起動方法2. mysql...

有名なウェブサイトのロゴに使われている25種類のフォントのコレクション

この記事では、25 の有名な Web サイト (Google、Yahoo、Twitter、Digg ...

MySQL における悲観的ロックと楽観的ロック

リレーショナル データベースでは、悲観的ロックと楽観的ロックがリソース同時実行シナリオのソリューショ...

React+Antdはテーブルの追加、削除、変更の例を実装します

目次テーブル/index.jsテーブル/モデル/index.jsテーブル/モデル/モジュール/bas...

Linux でログインタイムアウト後に非アクティブなユーザーを自動的にログアウトする

方法1: .bashrcまたは.bash_profileファイルを変更するこれは、ホーム ディレクト...

JavaScriptのスリープ関数の使用

目次1.スリープ機能2.タイムアウトを設定する3. 約束4. 非同期待機5. 1秒後に出力1、2秒後...

MySQL 8.0.11 のインストールと設定方法のグラフィック チュートリアル (win10)

この記事ではMySQL 8.0.11のインストールと設定方法を参考までに記録します。具体的な内容は以...

MySQL ストアド プロシージャのクエリ コマンドの概要

以下のように表示されます。 mysql.proc から名前を選択します (db='データベー...

MySql の 4 つのトランザクション分離レベルについて簡単に説明します。

分離レベル:隔離はあなたが考えるよりも複雑です。 SQL 標準では 4 つの分離レベルが定義されてお...

MySQL トランザクション分離レベルの原則例分析

導入あなたも面接でこれに遭遇したことがあるはずです。トランザクションの分離レベルについてお話ししまし...

Mysql マスタースレーブ同期 Last_IO_Errno:1236 エラー解決

Mysql マスタースレーブ同期の Last_IO_Errno:1236 エラーの原因は何ですか? ...

CentOS 7でsambaを使用してフォルダーを共有するための完全な手順

序文Samba は、サーバー プログラムとクライアント プログラムで構成され、Linux システム上...

ログインインターフェースの使いやすさとセキュリティのバランスをとる方法

ウェブデザイナーでもUIデザイナーでも、ログインページや登録ページのデザインは必ず経験しなければなら...