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

この記事は主に、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 までご連絡ください。
JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

JavaScriptエンジンの理解:実装の詳細JavaScriptエンジンの理解:実装の詳細Apr 17, 2025 am 12:05 AM

JavaScriptエンジンが内部的にどのように機能するかを理解することは、開発者にとってより効率的なコードの作成とパフォーマンスのボトルネックと最適化戦略の理解に役立つためです。 1)エンジンのワークフローには、3つの段階が含まれます。解析、コンパイル、実行。 2)実行プロセス中、エンジンはインラインキャッシュや非表示クラスなどの動的最適化を実行します。 3)ベストプラクティスには、グローバル変数の避け、ループの最適化、constとletsの使用、閉鎖の過度の使用の回避が含まれます。

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール