當前位置:編程學習大全網 - 源碼下載 - 【手把手教妳摩擦Vue反應原理】(5) Watcher和Dep

【手把手教妳摩擦Vue反應原理】(5) Watcher和Dep

手把手教妳Vue反應原理(1)認識Vue反應。

手把手教妳Vue響應原理(2)深度監控對象的所有屬性

手把手教妳Vue反應原理(3)觀察ob

手把手教妳摩擦Vue的響應原理(4)數組的響應處理

數據劫持之前已經完成。

然後,接下來,重點是兩點,依賴收集和觸發依賴更新。

它的意義主要在於控制這個變量用在什麽地方,然後用最小的開銷更新視圖。

首先,我們需要明白什麽是依賴。比如我們的模板裏有{{a}},所以這裏對變量A有依賴。

當模板被編譯時,變量A的getter將被觸發。

然後,當我們執行a++;,那麽,我們就會觸發依賴項的更新,原模板中的place {{a}}就會被更新,對!

因此,我們都在getter中收集依賴項,並在setter中觸發依賴項更新。

這壹節的內容主要用來闡明這兩件事。

依賴收集和觸發依賴更新主要由Dep和Watcher兩個類完成。

Dep和Watcher處於設計模式,即發布-訂閱模式。

而依賴,妳可以理解為所謂的訂閱者。

Dep是發行商,工作就是靠管理。要知道這個變量用在哪裏,有很多地方可能會用到,所以它會有多個訂閱者。

然後,每個變量應該有自己的Dep,因為每個變量依賴於不同的位置,所以它們的訂閱者是不同的。

然後,在變量更新之後,我會通知所有的訂閱者我的變量更新了,現在是妳觸發視圖更新的時候了。

說白了,Watcher就是訂閱者。接受Dep發送的更新通知後,將執行視圖更新。

實際上就是所謂的手表監聽器。變量改變後,執行壹個回調函數。

讓我們首先根據圖例創建我們的Dep類。

根據我們的需求:

正如我們前面所說的,每個屬性都應該有自己的Dep來管理依賴關系。

所以,首先,如果我們在Observer中創建Dep,那沒問題。畢竟,觀察者會穿過每壹個物體。

因此,顯然,我們可以在defineReactive的get中收集依賴項。

由於if(Dep.target)的判斷,只有綁定到Watcher的變量觸發getter時,才會添加依賴關系。

這個Dep.target實際上是Watcher的壹個實例。

因此,很明顯,我們可以調用defineReactive集合中的notify()方法來通知Watcher實例數據已經更新。

至此,我們已經幫助Dep完成了所有的職責。

其實按道理應該有刪除依賴,這裏就不展開了。

首先,watcher實例對於大家來說應該相對更容易理解,因為我們有壹個Watch監聽器,大家壹定很熟悉。這兩個其實是壹樣的。

讓我們首先根據圖例創建我們的Watcher類。

根據我們的需求:

這個parsePath需要單獨拿出來。比如我們現在就有這樣壹個對象。

我們想聽a.b.c.d,所以需要以下格式。

因此,這個get顯然有點難。我們需要通過循環得到a.b,然後c,然後d。

我們將這個方法命名為parsePath。

取了我們的b.c.d,可以看到第壹句執行完之後,segments=['b ',' c ',' d'],然後進行到第二層,第二層返回壹個方法,按照循環,即obj = obj.b = & gtobj = obj.c = & gtObj=obj.d,所以是返回壹個對象的obj.b.c.d,相當於在字符串中遍歷屬性樹。

在實施中a . b . c . d = 55;同時我們的控制臺會輸出ok 55 10。

上思谷Vue源代碼分析的數據響應原理

  • 上一篇:如何編寫51單片機音樂程序
  • 下一篇:軟件測試和軟件開發哪壹個專業更好?
  • copyright 2024編程學習大全網