Vue3雙向綁定實現原理及應用案例

一、Vue3雙向綁定的概念

雙向綁定是現代前端框架的一項重要特性,它能夠讓視圖和數據之間保持同步。在Vue中,我們一般通過採用v-model指令來實現雙向綁定。

在Vue3中,雙向綁定的實現原理借鑒了React的思路。即通過使用可觀察對象(obj)和Proxy實現監聽數據更新,並在更新時自動更新視圖。下面讓我們了解一下Vue3雙向綁定的實現方式。

二、Vue3雙向綁定的實現方式

Vue3中雙向綁定的實現方式主要涉及兩個核心概念:可觀察對象(obj)和Proxy。可觀察對象指的是一個被Vue監聽的對象,它裡面的屬性變化都會被Vue監聽到,並觸發相應的回調。而Proxy則是ES6的新特性,它可以用來代理某個對象,當這個對象的屬性被訪問和修改時,會自動觸發相應的操作。

1、可觀察對象(obj)的實現

  
  const reactive = (target) => {
    const handler = {
      get(target, key, receiver) {
        const res = Reflect.get(target, key, receiver)
        track(target, key) // 收集依賴
        return res
      },
      set(target, key, value, receiver) {
        const oldValue = target[key]
        const res = Reflect.set(target, key, value, receiver)
        if (oldValue !== res) {
          trigger(target, key) // 觸發更新
        }
        return res
      },
    }
    return new Proxy(target, handler)
  }
  

上面代碼中的reactive方法接受一個對象作為參數,返回一個可觀察對象。通過Proxy我們攔截了這個對象上面屬性的讀寫操作,並在操作時進行收集依賴(track)和觸發更新(trigger)的操作。

2、Proxy的實現

  
  const targetMap = new WeakMap()
  
  const track = (target, key) => {
    let map = targetMap.get(target)
    if (!map) {
      map = new Map()
      targetMap.set(target, map)
    }
    let dep = map.get(key)
    if (!dep) {
      dep = new Set()
      map.set(key, dep)
    }
    dep.add(effect)
  }
  
  const trigger = (target, key) => {
    const map = targetMap.get(target)
    if (!map) return
    const dep = map.get(key)
    if (!dep) return
    for (const effect of dep) {
      effect()
    }
  }
  
  const effectStack = []
  
  const effect = (fn) => {
    const rxEffect = () => {
      try {
        effectStack.push(rxEffect)
        fn()
      } finally {
        effectStack.pop()
      }
    }
    rxEffect()
  }
  

上面的代碼定義了三個方法:track、trigger和effect。其中,track用於收集依賴,trigger用於觸發更新,而effect則是Vue3中的響應式更新函數,在調用過程中會將當前effect(即正在執行的更新函數)添加到effectStack中。

三、Vue3雙向綁定的應用案例

下面我們通過一個具體的案例來演示Vue3雙向綁定的實現。我們假設有一個計數器,在頁面中顯示當前的計數值,並提供加一、減一和重置的功能。


const App = {
data() {
return { count: 0 }
},
template: `

{{ count }}



原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/269973.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 13:34
下一篇 2024-12-16 13:34

相關推薦

  • Python數據統計案例的實現

    Python作為一個高級編程語言,擁有著豐富的數據處理庫和工具,能夠快速、高效地進行各類數據處理和分析。本文將結合實例,從多個方面詳細闡述Python數據統計的實現。 一、數據讀取…

    編程 2025-04-29
  • Harris角點檢測演算法原理與實現

    本文將從多個方面對Harris角點檢測演算法進行詳細的闡述,包括演算法原理、實現步驟、代碼實現等。 一、Harris角點檢測演算法原理 Harris角點檢測演算法是一種經典的計算機視覺演算法…

    編程 2025-04-29
  • 瘦臉演算法 Python 原理與實現

    本文將從多個方面詳細闡述瘦臉演算法 Python 實現的原理和方法,包括該演算法的意義、流程、代碼實現、優化等內容。 一、演算法意義 隨著科技的發展,瘦臉演算法已經成為了人們修圖中不可缺少…

    編程 2025-04-29
  • 神經網路BP演算法原理

    本文將從多個方面對神經網路BP演算法原理進行詳細闡述,並給出完整的代碼示例。 一、BP演算法簡介 BP演算法是一種常用的神經網路訓練演算法,其全稱為反向傳播演算法。BP演算法的基本思想是通過正…

    編程 2025-04-29
  • yarn npm 倉庫用法介紹及使用案例

    本文將從多個方面對yarn npm倉庫進行詳細闡述,並為你提供一些實際使用案例。 一、npm和yarn的比較 npm和yarn都是JavaScript的包管理工具。npm在Java…

    編程 2025-04-27
  • GloVe詞向量:從原理到應用

    本文將從多個方面對GloVe詞向量進行詳細的闡述,包括其原理、優缺點、應用以及代碼實現。如果你對詞向量感興趣,那麼這篇文章將會是一次很好的學習體驗。 一、原理 GloVe(Glob…

    編程 2025-04-27
  • 編譯原理語法分析思維導圖

    本文將從以下幾個方面詳細闡述編譯原理語法分析思維導圖: 一、語法分析介紹 1.1 語法分析的定義 語法分析是編譯器中將輸入的字元流轉換成抽象語法樹的一個過程。該過程的目的是確保輸入…

    編程 2025-04-27
  • Python財務分析案例

    本文將以一個具體的案例為例,介紹如何使用Python進行財務分析。本文將從多個方面進行闡述。 一、數據收集和清洗 數據收集和清洗是財務分析的第一步。我們需要從不同數據源中收集數據,…

    編程 2025-04-27
  • Python項目案例:人臉識別

    人臉識別是指通過計算機對人臉圖像進行分析,識別出人臉上的一些信息,如人臉的位置、大小、姿態、形狀、以及其中的眼睛、鼻子、嘴巴等細節,對身份的識別具有重要的應用價值。 一、準備工作 …

    編程 2025-04-27
  • Python字典底層原理用法介紹

    本文將以Python字典底層原理為中心,從多個方面詳細闡述。字典是Python語言的重要組成部分,具有非常強大的功能,掌握其底層原理對於學習和使用Python將是非常有幫助的。 一…

    編程 2025-04-25

發表回復

登錄後才能評論