vue2與vue3的雙向綁定原理

vue2雙向綁定 Object.defineProperty()

Object.defineProperty()接收三個(gè)參數(shù)

  1. 要操作的對(duì)象 (Object)
  2. 要修改或定義的key(String)
  3. 描述key的屬性(Object)
<input type="text" id="input">
<span id="text"></span>
    let obj = {}
    // 重寫get和set
    Object.defineProperty(obj, 'prop', {
      get: function () {
        return val
      },
       // 當(dāng)值發(fā)生改變時(shí),去更新視圖層
      set: function (newval) {
        val = newval
        document.getElementById('text').innerHTML = val
      }
    })
    // 在輸入框輸入內(nèi)容時(shí)被keyup鍵盤類型 觸發(fā)事件監(jiān)聽
    document.getElementById('input').addEventListener('keyup', function (e) {
      obj.prop = e.target.value
    })

vue3雙向綁定 Proxy()

Proxy() 接收兩個(gè)參數(shù)

  1. 要操作的對(duì)象 (Object)
  2. 配置對(duì)象/描述key的屬性(Object)
<input type="text" id="input">
<span id="text"></span>
    let obj = {}
    const proxy = new Proxy(obj, {
      // 接受三個(gè)參數(shù) 目標(biāo)對(duì)象 key value
      get: function (target, prop, value) {
        return value
      },
      // 接受三個(gè)參數(shù) 目標(biāo)對(duì)象 key value
      set: function (target, prop, value) {
        target[prop] = value
        document.getElementById('text').innerHTML = value
      }
    })
    // 輸入框輸入內(nèi)容時(shí) 觸發(fā)事件監(jiān)聽
    document.getElementById('input').addEventListener('input', function (e) {
      proxy.prop = e.target.value
    })
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容