前記:
今天重溫vuejs
的響應式,發如今看源碼(2.5.17-beta.0
版本)的時候會被某些流程繞暈,特此記下今日所得。
vuejs
實現數據雙向綁定離不開發佈-訂閱者模式,一般會有一個「中間人」負責調度協調發布者與訂閱者的關係。在vuejs
中Dep
實例就是「中間人」,負責依賴收集及通知更新的調度工做。大體流程圖以下:vue
依次說明一下:spa
Observer
:發佈者,負責代理數據的get
和set
屬性,使數據的操做具備依賴收集(get
時調用)和變更更新通知(set
時調用)Dep
:中間人,調度發佈者與訂閱者之間的關係,在Watcher
獲取數據時,Observer
通知Dep
收集訂閱者,同時訂閱者收集依賴;Watcher
:訂閱者,視圖更新、computed
屬性值獲取、watch
選項的回調方法的調用會觸發Watcher
類的實例方法get()
的執行,獲取值的同時收集依賴,並去重同一個更新週期的依賴,避免重複觸發render
視圖更新;