一 Vue數據雙向綁定原理:
Vue數據雙向綁定原理是通過數據劫持結合發布者-訂閱者模式的方式來實現的,首先是對數據進行監聽,然后當監聽的屬性發生變化時則告訴訂閱者是否要更新,若更新就會執行對應的更新函數從而更新視圖。
二 在vue2.x版本中,數據劫持是用過Object.defineProperty這個API來實現:
Object.defineProperty的一些問題
- 遞歸遍歷所有的對象的屬性,這樣如果我們數據層級比較深的話,是一件很耗費性能的事情
- 只能應用在對象上,不能用於數組
- 只能夠監聽定義時的屬性,不能監聽新加的屬性,這也就是為什么在vue中要使用Vue.set的原因,刪除也是同理
三 在vue3版本中,使用了proxy去實現對象的監聽,避免了以上問題的出現,下面我們用proxy實現一個簡易版本的數據劫持:Proxy 可以理解成,在目標對象之前架設一層“攔截”,外界對該對象的訪問,都必須先通過這層攔截,因此提供了一種機制,可以對外界的訪問進行過濾和改寫。
- proxy可以直接監聽數組的修改
- proxy可以直接監聽屬性的新增和刪除
- 在實現深度監聽的時候,只有在data對象的屬性被訪問的時候,才去對這個屬性做監聽處理,而不是一次性遞歸所有的。
推薦閱讀:
Vue如何實現數據劫持:https://zhuanlan.zhihu.com/p/111591503