公交车上荫蒂添的好舒服的电影-公用玩物(np双xing总受)-公用小荡货芊芊-公与妇仑乱hd-攻把受做哭边走边肉楼梯play-古装一级淫片a免费播放口

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

前端開發(fā):深入了解Vue數(shù)據(jù)響應(yīng)式原理

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

Vue的響應(yīng)式原理是基于發(fā)布訂閱模式實(shí)現(xiàn)的。所以先來了解一下發(fā)布訂閱模式【Publish-Subscribe Pattern】

了解前端常見的兩種設(shè)計(jì)模式

發(fā)布-訂閱模式 Publish-Subscribe Pattern

由發(fā)布者Publisher、訂閱者列表Subscriber、消息隊(duì)列/調(diào)度中心Event Channel組成的形式。發(fā)布者Publisher和訂閱者Subscriber之間是互不相識(shí),不直接通信交流的,而是通過消息隊(duì)列進(jìn)行。

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

image.png

特點(diǎn)

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

舉例子

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

面試有時(shí)候會(huì)被問到觀察者模式和發(fā)布-訂閱模式之間有什么不同。簡(jiǎn)單的說:觀察者(Observer)直接訂閱(Subscribe)主題(Subject),而當(dāng)主題被激活的時(shí)候,會(huì)觸發(fā)(Fire Event)觀察者里的事件,沒有中介代替?zhèn)鬟f消息。

觀察者模式定義了對(duì)象間的一種一對(duì)多的依賴關(guān)系,當(dāng)一個(gè)對(duì)象的狀態(tài)發(fā)生改變時(shí),所有依賴于它的對(duì)象都將得到通知,并自動(dòng)更新。觀察者模式屬于行為型模式,行為型模式關(guān)注的是對(duì)象之間的通訊,觀察者模式就是觀察者和被觀察者之間的通訊。

image.png

特點(diǎn)

  • 松耦合:實(shí)現(xiàn)了主題和觀察者之間的松耦合。
  • 一對(duì)多關(guān)系:一個(gè)主題可以有多個(gè)觀察者。
  • 可擴(kuò)展性:可以隨時(shí)添加新的觀察者,或刪除現(xiàn)有觀察者。
  • 實(shí)時(shí)性:主題發(fā)生變化時(shí),觀察者能立刻收到通知。

舉例子

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 數(shù)據(jù)響應(yīng)式原理

image.png

Vue2的數(shù)據(jù)對(duì)象是通過Object.defineProperty進(jìn)行數(shù)據(jù)劫持, 將其對(duì)象屬性轉(zhuǎn)化為響應(yīng)式屬性。同時(shí),為每個(gè)屬性創(chuàng)建一個(gè)Dep對(duì)象,收集當(dāng)前屬性的依賴關(guān)系。這里的Dep就相當(dāng)于上文發(fā)布訂閱模式中講到的調(diào)度中心。

當(dāng)讀取數(shù)據(jù)時(shí)會(huì)觸發(fā)getter,修改數(shù)據(jù)時(shí)會(huì)觸發(fā)setter。Watcher對(duì)象作用是建立依賴關(guān)系,檢測(cè)數(shù)據(jù)變化,并在數(shù)據(jù)變化時(shí)執(zhí)行相應(yīng)的更新操作。Watcher機(jī)制是基于異步更新的,這樣能避免頻繁更新,提高性能和優(yōu)化用戶體驗(yàn)。

Vue3 數(shù)據(jù)響應(yīng)式原理

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

Proxy:在目標(biāo)對(duì)象之前假設(shè)一層攔截,可以對(duì)外界的訪問進(jìn)行改寫。可以通過其get捕獲器攔截讀取對(duì)象屬性,通過set捕獲器攔截對(duì)象屬性賦值。

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

image.png

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

  1. 優(yōu)化數(shù)組監(jiān)聽:Proxy可以直接攔截?cái)?shù)組索引設(shè)置和長(zhǎng)度變更。
  2. 嵌套對(duì)象處理:Vue2需要遞歸對(duì)每個(gè)子對(duì)象進(jìn)行數(shù)據(jù)攔截,而Proxy代理整個(gè)對(duì)象,無(wú)論層級(jí)多深都能有效追蹤數(shù)據(jù)變化。
  3. 全面屬性監(jiān)聽:Vue2只能監(jiān)聽已注冊(cè)的屬性,Vue3能對(duì)對(duì)象屬性的新增刪除修改做全面監(jiān)聽和數(shù)據(jù)變化追蹤。

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

主站蜘蛛池模板: 国产人妻综合免费观看影院 | 国产精品萌白酱在线观看 | 国产免费一区二区三区在线观看 | 国产亚洲日韩在线a不卡 | 国产成久久免费精品av片天堂 | 2025女人天堂在线观看 | 国产女主播一二三区丝袜美腿 | 国产免费1区 | 精品国产日韩一区二区三区 | 国产精品三级一区二区 | 国产vr精品专区 | 91久久精品无码一级毛片 | 91亚洲中文天堂 | 国产真街拍裙底系列在线观看 | 国产成人综合亚洲欧美在线观看 | 国产精品亚洲精品青 | 丰满人妻无码专区视频 | 国产福利短片视频在线观看 | 精品日产一区二区三区 | 国产成人综合日韩精品无码 | 成人免费动作大片黄在线 | 3d动漫精品啪啪一区二区中 | 国产亚洲欧美日韩在线看片 | 国产在线手机喷潮视频 | a级一级毛片大全视频 | 国产欧美亚洲日本网站 | 99国产成人免费视频 | 国产成人精品日本亚洲999 | 国产精品无码一二区免费 | av中文字幕潮喷人妻系列 | 操国产美 | 成人无码影片视频在线 | 国产精品三级在线播放 | 按摩一级国产毛片按摩 | 精品一区二区三区三区 | 国产91久久久久久久免费 | 成人三级视频在线观看不卡 | 国产制服丝袜亚洲日本在线 | 国产精品亚洲欧美大片在线看 | 国产精品丝袜美女久久 | 18禁黄污无遮挡无 |