ホームページ ウェブフロントエンド jsチュートリアル vue、angular、react を使用して双方向データ バインディングを実装する方法

vue、angular、react を使用して双方向データ バインディングを実装する方法

Jun 23, 2018 pm 05:09 PM
angular angularjs react vue

この記事は主に、vue、angular、react データの双方向バインディング原則の簡単な分析を紹介しています。編集者はそれが非常に優れていると考えたので、参考として共有します。エディターをフォローして見てみましょう

従来の方法

フロントエンドのメンテナンス状況、DOMを手動で操作してビューを更新します。フロントエンド フレームワークは、テンプレートを通じてサーバー データをレンダリングします。ユーザーがアクションを実行すると、document.getElementBy... を通じて DOM を手動で更新します。
フレームワークはデータとビューを分離するのに役立ちます。フレームワークは初回のみレンダリングし、ステータス監視の変更を追跡しないため、後続のステータス更新には DOM の手動操作が必要です。

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

フロントエンド開発で MV* モデルを採用する場合、M - モデルはデータであるモデルを指し、V - ビューはビューを指します。ページには一部が表示されます。通常、サーバーから取得したデータを「レンダリング」してビューに表示するコードを記述する必要があります。データが変更されるたびに、ビューがデータと一致するように、再度レンダリングしてビューを更新します。

このページでは、ユーザーの操作を通じてステータスとデータの変更も生成されます。このとき、ビューのデータの更新をバックエンド サーバーに同期するコードを作成します。つまり、

フロントエンド MV* フレームワークが異なれば、Model と View 間のデータ同期の処理方法も異なります。 Backbone では、Model から View にデータを転送するときに、Model が更新されるたびに View で Model の変更イベントをリッスンすることができ、View でレンダリングが再実行されます。ビューからモデルへのデータ転送では、ビューに対応する DOM 要素のさまざまなイベントを監視できます。ビューの状態の変化を検出した後、変更されたデータが (両側のリッスン イベントを通じて) モデルに送信されます。 Backbone と比較して、AngularJS で表される MVVM フレームワークはさらに一歩進んで、このデータ同期メカニズムをフレームワーク レベルからサポートしており、双方向のデータ バインディングです。

さまざまな MVVM フレームワークでは、双方向のデータ バインディングは次のとおりです。導入されたテクノロジーは違いを生みます。

AngularJS は「ダーティ値検出」メソッドを採用しており、データが変更された後、すべてのデータとビューの間のバインディング関係を検出して、データが変更されたかどうかを識別します。これにより、他のデータがさらに変更される可能性があります。破損しているため、このプロセスはデータの変更がなくなるまで数回繰り返され、変更されたデータがビューに送信され、ページが更新されます。 ViewModel のデータが手動で変更された場合、その変更がビューに確実に同期されるようにするには、「ダーティ値の検出」を手動でトリガーする必要があります。

VueJS は、ES5 が提供する Object.defineProperty() メソッドを使用してデータの操作を監視し、データ同期を自動的にトリガーします。さらに、同期は異なるデータに対してトリガーされるため、すべてのデータに対してテストを実行するのではなく、変更をバインドされたビューに正確に送信できます。

Vue 双方向データ バインディングは、データとビューの

バインディングと同期を実装します。これは最終的にデータの読み取りと書き込みのプロセス、つまり Object.defineProperty( で定義されたデータ セットと取得関数) に反映されます。 )。 Vue の関数は、defineReactive です。実装の簡素化されたバージョンでは、いくつかの基本的な機能のみを保持しました。

  function defineReactive(obj, key, value){
    var dep = new Dep();
    Object.defineProperty(obj, key, {
      enumerable: true,
      configurable: true,
      get: function reactGetter(){
        if(Dep.target){
          dep.depend();
        }
        return value;
      },
      set: function reactSetter(newVal){
        if (value === newVal) {
          return;
        } else {
          value = newVal;
          //如果数据发生改变,则通知所有的 watcher(借助 dep.notify())
          dep.notify();
        }
      }
    })
  }
ログイン後にコピー

データを読み取るとき、現在ウォッチャー (データのオブザーバー) が存在する場合、ウォッチャーはデータを取得する責任があります。新しいデータがビューに送信され)、その後ウォッチャーが現在のデータにバインドされます (dep.depend()、dep は現在のデータをすべてのウォッチャーの依存関係に関連付けます)。これは、依存関係を確認して記録するプロセスです。データを割り当てるときに、データが変更されると、すべてのウォッチャーに通知されます (dep.notify() を使用)。このようにして、データを手動で変更した場合でも、フレームワークはデータをビューに自動的に同期できます。

データバインディング関係の識別プロセス

VueとAngularJSでは、HTMLに命令を追加することでビュー要素とデータ間のバインディング関係を宣言します

  <form id="test">
    <input type="text" v-model="name">
  </form>
ログイン後にコピー

上記のHTMLコードは入力を表します 要素は名前にバインドされますデータ。 JS コードで次のように初期化できます:

  var vm = new Vue({
   el: &#39;#test&#39;,
   data: {
    name: &#39;sysuzhyupeng&#39;
   }
  })
ログイン後にコピー

コードが正しく実行されると、ページ上の入力要素に対応する位置に、上記のコードで指定された初期値 sysuzhyupeng が表示されます。

vm.name = ‘zhyupeng’ を実行すると、ページ上の入力も更新されて次のように表示されます: zhyupeng。ページのテキスト ボックスのコンテンツを yupeng に変更すると、vm.name を通じて取得される値は 'yupeng' になります

React データ バインディング

React は、仮想 DOM ツリーの更新を考慮して次のメソッドを使用します:

  1. プロパティの更新はコンポーネント自体によって処理されます

  2. 構造を更新し、サブツリー (仮想 DOM) を再レンダリングし、最小限の変更手順を見つけて、DOM 操作をパッケージ化し、実際の DOM ツリーにパッチを適用します

純粋にデータ バインディングの観点から見ると、React 仮想 DOM はデータバインディングはありません。 setState() は以前の状態を維持しない (状態は破棄される) ため、バインディングはありません

データ更新メカニズムの観点から見ると、React はデータ モデルを提供する方法と似ています (更新する必要があります)スルー状態)

双方向データがありません。バインドする場合、双方向入力シナリオを実装するにはどうすればよいですか?フレームワークが提供する API を介して、データ変更を手動で通知する方法は、DOM を操作する方法と非常に似ています

以上が、皆様の今後の参考になれば幸いです。

関連記事:

JSでクロス座標追従マウスエフェクトを実装する方法

jQueryでEasyUIウィンドウを使用する方法

Angular4.0でlaydate.js日付プラグインを使用する方法

以上がvue、angular、react を使用して双方向データ バインディングを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Vue.js vs. React:プロジェクト固有の考慮事項 Vue.js vs. React:プロジェクト固有の考慮事項 Apr 09, 2025 am 12:01 AM

VUE.JSは、中小規模のプロジェクトや迅速な反復に適していますが、Reactは大規模で複雑なアプリケーションに適しています。 1)Vue.jsは使いやすく、チームが不十分な状況やプロジェクトスケールが小さい状況に適しています。 2)Reactにはより豊富なエコシステムがあり、高性能で複雑な機能的ニーズを持つプロジェクトに適しています。

VUEのボタンに関数を追加する方法 VUEのボタンに関数を追加する方法 Apr 08, 2025 am 08:51 AM

HTMLテンプレートのボタンをメソッドにバインドすることにより、VUEボタンに関数を追加できます。 VUEインスタンスでメソッドを定義し、関数ロジックを書き込みます。

HTMLにおけるReactの役割:ユーザーエクスペリエンスの向上 HTMLにおけるReactの役割:ユーザーエクスペリエンスの向上 Apr 09, 2025 am 12:11 AM

ReactはJSXとHTMLを組み合わせてユーザーエクスペリエンスを向上させます。 1)JSXはHTMLを埋め込み、開発をより直感的にします。 2)仮想DOMメカニズムは、パフォーマンスを最適化し、DOM操作を削減します。 3)保守性を向上させるコンポーネントベースの管理UI。 4)国家管理とイベント処理は、インタラクティブ性を高めます。

VUE関数のパラメーターを渡す方法 VUE関数のパラメーターを渡す方法 Apr 08, 2025 am 07:36 AM

パラメーターをvue.js関数に渡す2つの主な方法があります。スロットを使用してデータを渡すか、バインドで関数をバインドし、パラメーターを提供します。スロットを使用してパラメーターを渡します。コンポーネント内でアクセスし、関数のパラメーターとして使用されます。バインドバインディングを使用してパラメーターを渡します:vue.jsインスタンスのバインド関数と関数パラメーターを提供します。

Function Intercept Vueの使用方法 Function Intercept Vueの使用方法 Apr 08, 2025 am 06:51 AM

VUEの関数傍受は、指定された期間内に関数が呼び出され、パフォーマンスの問題を防ぐ回数を制限するために使用される手法です。実装方法は次のとおりです。LodashLibrary:Import {Debounce}から「Lodash」からインポート。 debounce関数を使用して、インターセプト関数を作成します。インターセプト関数を呼び出すと、制御関数は500ミリ秒でせいぜい1回呼び出されます。

Vueにタグをジャンプする方法 Vueにタグをジャンプする方法 Apr 08, 2025 am 09:24 AM

VUEでタグのジャンプを実装する方法には、HTMLテンプレートでAタグを使用してHREF属性を指定する方法が含まれます。 VUEルーティングのルーターリンクコンポーネントを使用します。 JavaScriptでこれを使用します。$ router.push()メソッド。パラメーターはクエリパラメーターに渡すことができ、ルートは動的ジャンプのルーターオプションで構成されています。

VueのDivにジャンプする方法 VueのDivにジャンプする方法 Apr 08, 2025 am 09:18 AM

VUEにDIV要素をジャンプするには、VUEルーターを使用してルーターリンクコンポーネントを追加するには、2つの方法があります。 @clickイベントリスナーを追加して、これを呼び出します。$ router.push()メソッドをジャンプします。

Vueでリーチループを使用する方法 Vueでリーチループを使用する方法 Apr 08, 2025 am 06:33 AM

vue.jsのforeachループは、v-forディレクティブを使用します。これにより、開発者は各要素を配列またはオブジェクトの各要素を繰り返し、各要素で特定の操作を実行できます。構文は次のとおりです。&lt; Template&gt; &lt; ul&gt; &lt; li v-for =&quot;アイテムの項目&gt;&gt; {{item}}&lt;/li&gt; &lt;/ul&gt; &lt;/template&gt;&am

See all articles