応答性を実現するための object.defineProperty の理解 observe/watcher/depが何を指すのかを知る パブリッシュ・サブスクライブモデルとそれが解決する特定の問題を理解する 一般的に、Javascript でデータ応答性を実装するには、それぞれ vue2.x と vue3.x で使用されるメソッドに対応する 2 つのソリューションがあります。これらは次のとおりです。
ヒント:以下はこの記事の主な内容です。以下のケースを参考にしてください。 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 }) } }) } }) } 要約する
Vue のレスポンシブ原則と双方向データに関するこの記事はこれで終わりです。Vue のレスポンシブ原則と双方向データに関するより関連性の高いコンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
>>: VMware Workstation Pro が Win10 アップデートにより開けなくなる問題の解決方法
状況は以下のとおりです: (PS: 赤いボックスは iframe 領域を表し、灰色の四角形は上記の ...
目次Samba サーバーの紹介Samba サーバー コンポーネントSamba サーバー関連の設定ファ...
1. 崩壊度が高いドキュメント フローでは、親要素の高さはデフォルトで子要素によって拡張されます。つ...
この記事では、参考までにWinにmysqlをインストールする詳細な手順を紹介します。具体的な内容は次...
この記事は参考までにmysql 8.0.19 winx64.zipのインストールチュートリアルを記録...
nginx は弊社で最もよく使用されるサーバーで、コンテンツ配信やリバース プロキシによく使用されま...
複雑なテーブル構造では、一部のセルが垂直方向に複数のセルにまたがるため、列間属性 COLSPAN を...
目次1. DOMとは何か2. 要素を選択する3. getElementById() 4. クエリセレ...
EXPLAIN は、MySQL がインデックスを使用して選択ステートメントを処理し、テーブルを結合す...
この記事の例では、WeChatアプレットで写真をアップロードするための具体的なコードを参考までに共有...
MySQL の mysql 5.7.18 zip バージョンは、クリックして次のステップをクリックし...
この記事では、LinuxでのMySQL 5.6.27のインストールチュートリアルを参考までに紹介しま...
目次1. $(".box1").click() メソッドを実装する2. $(&q...
目次1. データを準備するデータテーブルを作成するデータの挿入2. SQLドリル1. SQL文の強化...
目次ステップ1: プロジェクトをインストールするディレクトリにnode_modulesをインストール...