- Vue在數據初始化的時候會對data,computed,watcher中的屬性進行依賴收集,如果支持proxy,則直接使用proxy進行攔截,好處是可以深層次的進行攔截,如果不支持proxy,則使用object.defineProperty來進行數據攔截依賴收集。但是object.defineProperty無法做到深層次的監聽,所以對屬性進行遞歸算法去實現依賴收集,如果在初始化沒有將屬性收集進去,則很有可能沒有收集到依賴,這種情況則需要使用$set, 在$set中重新進行依賴收集。
- 還有一種情況是直接操作數組的下標,也不會發生dom更新,其實vue對數組的push, pop,unshift, shift,splice,sort,reverse這幾個方法進行了重新定義,如果使用這幾個方法對數組進行操作,是可以監聽到數據變化的。
- 還有一種,就是你的數據變更在dom掛載之前,比如,數組要放到一個容器里渲染,可是容器還沒有掛載出來。導致找不到dom,這種情況就需要使用$nextTick。