Vue響應式原理

2021-10-07 09:30:12 字數 1665 閱讀 8698

不要認為資料發生改變,介面跟著更新,是理所當然的

其實並不是理所當然的,內部其實做了很多封裝

>

}<

/div>

"./node_modules/vue/dist/vue.js"

>

<

/script>

newvue(}

)<

/script>

<

/body>

2.當資料發生改變,vue是如何知道要通知哪些人介面發生更新?

發布訂閱者模式

newvue(}

)把data物件傳到了vue內部,一旦傳進去,內部會做下面這個事情

const obj =

object.

keys

(obj)

.foreach

(key=>

,get()

})})

內部拿到乙個obj的物件,進行遍歷,拿到每乙個key對應的值,現在要監聽值的改變?用object.defineproperty來監聽,給obj物件定義乙個key的屬性,obj原來的屬性不好監聽,所以來重新定義。

現在要告訴別人,誰來用監聽到的東西。誰用就告訴誰,那我們怎麼知道誰在用呢?根據解析html**獲取到哪些人有用屬性,獲取值的時候會呼叫get,一旦我發現value發生改變,就通知呼叫get的人。就是發布者訂閱者模式,也就是讓呼叫get的人訂閱屬性的改變。

>

}//張三

}//李四

}//王五

}<

/div>

//發布者

class

dependency

//加進去要訂閱的人,通知他們之後,他們會更新

addsub

(watcher)

//值發生改變了,拿到所有的訂閱者,就通知更新

notify()

)}}//訂閱者

class

watcher

update()

}//呼叫constructor

const dep=

newdependency()

//誰呼叫了get 就建立watcher

const watcher1=

newwatcher

('張三'

) dep.

addsub

(watcher1)

dep.

notify

()

把多個訂閱者物件新增進發布者,發布者只要呼叫了`notify()``,立馬通知所有的訂閱者,讓他更新自己的update,更新自己的介面。

observer做的事情就是object.defineproperty,對屬性進行劫持,拿到object.key,每乙個屬性都需要劫持,乙個屬性就對應建立乙個dep物件,

name -> dep物件 -> subs -> [watcher1,watcher2]

vue響應式布局 Vue 響應式原理

vue2 的資料偵測 在 src observer 目錄裡面,元件例項在初始化時,會呼叫 observe 函式處理 data function initdata vm observe 改寫了所有物件屬性的 getter setter 和陣列原型上的 7 個會改寫陣列方法,從而讓 data 變成可響應...

vue響應式原理

響應式系統是vue框架核心的部分,資料物件僅僅是普通的 js物件。當我們改變資料時,檢視也會被改變,本文就來 一下vue 的響應式原理。vue響應式的核心是使用了es5 新增的api object.defineproperty 因此vue不支援ie8 object.defineproperty的作用...

vue響應式原理

要了解響應式原理首先應該知道什麼是響應式 更改 vue的響應式原理是什麼 vue資料的雙向繫結是通過資料劫持結合發布訂閱模式,偵測到資料變化,然後通過object.defineproperty 物件對每個屬性的getter和setter進行劫持。當讀取 data 中的資料時自動呼叫 get 方法,當...