vue応答式の原理と双方向データの深度解析


object.definePropertyを理解して応答式を実現します。
observe/watch/depとは具体的に何を指していますか?
購読モードのリリースとその解決の具体的な問題を理解する。
Javascriptでデータ応答式を実現するには、一般的に2つの案があります。それぞれvue 2.xとvue 3.xの使い方に対応しています。それぞれ:
オブジェクト属性ブロック(vue 2.x)Object.defineProperty
対象全体代理(vue 3.x)Proxy
ヒント:以下は本文の内容で、以下の判例は参考にできます。
vue-応答式は何ですか?
Vueの最も独特な特性の一つは、侵入性のない応答式システムである。データモデルは普通のJavaScriptオブジェクトだけです。これらを変更すると、ビューが更新されます。これは状態管理を非常に簡単に直接にしますが、仕事の原理を理解することも重要です。これはよくある問題を避けることができます。この章では検討してみます。
Vue応答式システムの底辺の詳細。
vue-応答式はどうやって実現しますか?
データ応答式:データモデルは普通のJavaScriptオブジェクトだけで、データを修正すると表示が更新され、頻繁なDOM操作を回避し、開発効率を向上させます。これはJqueryと違って、Jqueryは頻繁にDomを操作します。
双方向データバインディングの理解
データの変更、ビューの変更、ビューの変更、データも一緒に変更されます。
v-modelを使ってフォーム要素に双方向データバインディングを作成できます。
データドライバはVueの最も独特な特性の一つです。
開発過程ではデータ自体に注目するだけで、データがどのように表示されているかに関心を持つ必要はありません。主流のMVMフレームワークは、データ応答式と双方向結合が既に実現されているので、DOMにデータを結びつけることができる。
vue.jsでは、データ駆動とは、データが変化したときにユーザーインターフェースが変化し、開発者が手動でdomを修正する必要がないということです。
データ駆動の理解:
では、vuejsはどのようにしてこのデータ駆動を実現しますか?
Vueがデータ双方向バインディングを実現するのは主に、データハイジャック結合リリース者-購読者モードを採用し、Object.definePropertyを通じて各属性のsetterをハイジャックし、getterがデータ変動時に購読者にメッセージを発表し、対応するモニターのフィードバックをトリガすることである。一般的なJavascriptオブジェクトをVueのインスタンスに送ってdataオプションとすると、Vueはその属性を遍歴し、Object.definePropertyでそれらをgetter/setterに変えます。ユーザーはgetter/setterが見えませんが、内部ではVueに依存性を追跡させ、属性がアクセスされた時と修正された時に変化を通知します。
vueのデータ双方向バインディング
MVMをデータバインディングの入口として、Observer、Comple、Watchの3つを統合し、Observerを通じて自分のmodelのデータ変化をモニターし、Compleを通じてテンプレートコマンド(vueでは解析用{})を解析し、最終的にwatchを利用してObserverとCompleの間の通信橋を持ち上げて、データ変化に達する――ビューを更新する。ビューのインタラクティブ変化(input)>>データmodelが双方向バインディング効果を変更します。
vue-双方向データの分析?v-model双方向データバインディングの原理
コードは以下の通りです。

  <script>
    // Object     value   
    let data = {
      name: '  ',
      age: 18
    }

    Object.keys(data).forEach(key => {
      defineReactiveProperty(data, key, data[key])
    })

    function defineReactiveProperty(data, key, value) {
      Object.defineProperty(data, key, {
        // get  
        get() {
          return value
        },
        // set   
        set(newVaue) {
          if (newVaue === value) {
            return
          }
          value = newVaue
          compine()
        }
      })
    }
    compine()
  </script>
</body>

</html>

 
 function compine () {
  //   document.querySelect('#app').childNodes   app       
  const nodes = document.querySelector('#app').childNodes
  //                            foreach 
  // console.log(nodes)

  nodes.forEach(item => {
    //      item html:49 <input type=​"text" v-model=​"name">​    input    
    // console.log(item)
    //           ,  nodes         ‘text' nodeType 3,   nodetype 1,if         
   if (item.nodeType === 1){
     const attrs = item.attributes
      // 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
        if (arr.nodeName === 'v-model'){
            item.value = data[arr.nodeValue]
            item.addEventListener('input',e => {
              console.log(e.target.value)
              //  
              data[arr.nodeValue] = e.target.value
            })
        }
      })
   }
  })
}
締め括りをつける
  • データ応答式の実装は対象属性ブロックにすぎません。Object.definePropertyを使って実現します。
    Proxyオブジェクトエージェントを使って最適化しました。
  • 面接の宝典の上で言及したいくつかの専門用語
    observeオブジェクトとは、データを応答的に処理するオブジェクトのことです。
    ウオッチとは、データが変化した後の更新関数のことです。一つはビューを更新するためのウオッチです。一つはウォッチの配置によって宣言されたウオッチです。
    depとは、発行購読によって実現される収集更新関数および更新関数をトリガするオブジェクト
  • のことである。
  • コマンドの実現の核心は、テンプレートのコンパイルによって識別情報を見つけてからデータを縛り上げ、データが変化したら再度
  • を置くだけである。
  • による購読モードの本質は、1組以上の問題を解決することであり、vueにおいてデータの変化を実現した後の正確な更新
  • である。
    ここでvue応答式の原理と双方向データについての記事を紹介します。もっと関連するvue応答式の原理と双方向データの内容は以前の文章を検索してください。または下記の関連記事を引き続き閲覧してください。これからもよろしくお願いします。