狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

前端開發:深入了解Vue數據響應式原理

admin
2024年4月26日 12:6 本文熱度 730

Vue的響應式原理是基于發布訂閱模式實現的。所以先來了解一下發布訂閱模式【Publish-Subscribe Pattern】

了解前端常見的兩種設計模式

發布-訂閱模式 Publish-Subscribe Pattern

由發布者Publisher、訂閱者列表Subscriber、消息隊列/調度中心Event Channel組成的形式。發布者Publisher和訂閱者Subscriber之間是互不相識,不直接通信交流的,而是通過消息隊列進行。

可以理解為:某博主(發布者)發布了一個短視頻在短視頻平臺(消息隊列)上,每天上班搬磚的打工人(訂閱者)趁著吃飯的時間,刷刷短視頻,發現該博主的視頻非常優秀有內容,于是在該短視頻平臺上訂閱關注了該視頻博主。然后該博主只要更新了視頻,你就能接收到通知。

image.png

特點

  • 松解耦:發布者訂閱者通過中介進行通信,互不知曉對方存在。降低了組件間的耦合度,使得更容易理解維護和擴展。
  • 擴展性:由于解耦性,可以更容易擴展。新增發布者或訂閱者不影響現有組件。
  • 靈活性:允許任何數量的發布者訂閱者存在,支持多對多通信。刪除、修改、新增不影響系統運行。
  • 異步通信:支持異步通信,能更高效處理消息,提高響應性。

舉例子

class eventChannel {
  constructor() {
    this.msgMap = {}
  }
  publish(name, param) {
    const msg = this.msgMap[name]
    if (msg) {
      msg.subscribeList.forEach(subscribe => {
        subscribe.callback(param)
      })
    }
  }
  subscribe(name, callback) {
    const msg = this.msgMap[name]
    if (msg) {
      msg.subscribe.push({callback})
    } else {
      this.msgMap[name] = {
        name,
        subscribeList: [{callback}]
      }
    }
  }
}

觀察者模式 Observer Pattern

面試有時候會被問到觀察者模式和發布-訂閱模式之間有什么不同。簡單的說:觀察者(Observer)直接訂閱(Subscribe)主題(Subject),而當主題被激活的時候,會觸發(Fire Event)觀察者里的事件,沒有中介代替傳遞消息。

觀察者模式定義了對象間的一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都將得到通知,并自動更新。觀察者模式屬于行為型模式,行為型模式關注的是對象之間的通訊,觀察者模式就是觀察者和被觀察者之間的通訊。

image.png

特點

  • 松耦合:實現了主題和觀察者之間的松耦合。
  • 一對多關系:一個主題可以有多個觀察者。
  • 可擴展性:可以隨時添加新的觀察者,或刪除現有觀察者。
  • 實時性:主題發生變化時,觀察者能立刻收到通知。

舉例子

let observerIds = 0
// 被觀察者
class Subject {
  constructor() {
    this.observeres = []
  }
  addObservere(observer) {
    this.observeres.push(observer)
  }
  removeObservere(obs) {
    this.observeres = this.observeres.filter(observer => observer !== obs )
  }
  notify(data) {
    this.observeres.forEach(observer => observer(data))
  }
}

// 觀察者
class Observer {
  constructor() {
    this.id  = observerIds++
  }
  update(ob) {
    // ...
  }
}

Vue2 數據響應式原理

image.png

Vue2的數據對象是通過Object.defineProperty進行數據劫持, 將其對象屬性轉化為響應式屬性。同時,為每個屬性創建一個Dep對象,收集當前屬性的依賴關系。這里的Dep就相當于上文發布訂閱模式中講到的調度中心。

當讀取數據時會觸發getter,修改數據時會觸發setter。Watcher對象作用是建立依賴關系,檢測數據變化,并在數據變化時執行相應的更新操作。Watcher機制是基于異步更新的,這樣能避免頻繁更新,提高性能和優化用戶體驗。

Vue3 數據響應式原理

Vue3 是基于proxy的Observer,通過Proxy攔截對象屬性變化,通過Reflect對原對象屬性進行操作。

Proxy:在目標對象之前假設一層攔截,可以對外界的訪問進行改寫。可以通過其get捕獲器攔截讀取對象屬性,通過set捕獲器攔截對象屬性賦值。

Reflect:提供了一組和Objct類似的方法,用于操作對象。Vue3中主要配合Proxy進行操作,以獲取/設置代理對象屬性值。

image.png

Vue3使用Proxy替代Obejct.defineProperty,解決了以下問題:

  1. 優化數組監聽:Proxy可以直接攔截數組索引設置和長度變更。
  2. 嵌套對象處理:Vue2需要遞歸對每個子對象進行數據攔截,而Proxy代理整個對象,無論層級多深都能有效追蹤數據變化。
  3. 全面屬性監聽:Vue2只能監聽已注冊的屬性,Vue3能對對象屬性的新增刪除修改做全面監聽和數據變化追蹤。

該文章在 2024/4/28 21:13:50 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved