Vue.js響應式原理

來源:互聯網
上載者:User

標籤:

本文和大家分享的主要是Vue.js 響應式原理相關內容,一起來看看吧,希望對大家 學習Vue.js有所協助。 關於Vue.jsVue.js 是一款 MVVM 架構,上手快速簡單易用,通過響應式在修改資料的時候更新視圖。 Vue.js 的響應式原理依賴於 Object.defineProperty  ,尤大大在Vue.js 文檔中就已經提到過,這也是 Vue.js 不支援 E8 以及更低版本瀏覽器的原因。 Vue 通過設定對象屬性的  setter/getter  方法來監聽資料的變化,通過 getter 進行依賴收集,而每個 setter 方法就是一個觀察者,在資料變更的時候通知訂閱者更新視圖。 將資料data變成可觀察(observable)的那麼Vue 是如何將所有 data 下面的所有屬性變成可觀察的( observable )呢? function  observer(value) {Object.keys(value).forEach((key) => defineReactive(value, key, value[key] , cb))} function  defineReactive (obj, key, val, cb) {Object.defineProperty(obj, key, {enumerable: true,configurable: true,get: ()=>{/*.... 依賴收集等 ....*/},set:newVal=> {cb();/* 訂閱者收到訊息的回調 */}})} class  Vue { constructor(options) { this._data = options.data;observer( this._data, options.render)}} let app =  new Vue({el: ’#app’,data: {text: ’text’,text2: ’text2’},render(){console.log("render");}})為了便於理解,首先考慮一種最簡單的情況,不考慮數組等情況,代碼如上所示。在  initData 中會調用  observe  這個函數將Vue 的資料設定成 observable 的。當 _data 資料發生改變的時候就會觸發 set ,對訂閱者進行回調(在這裡是 render )。那麼問題來了,需要對app._date.text 操作才會觸發 set 。為了偷懶,我們需要一種方便的方法通過app.text 直接設定就能觸發 set 對視圖進行重繪。那麼就需要用到代理。 代理我們可以在Vue 的建構函式 constructor 中為 data 執行一個代理  proxy  。這樣我們就把data 上面的屬性代理到了 vm 執行個體上。_proxy(options.data);/* 建構函式中 *//* 代理 */ function  _proxy (data) { const that =  this;Object.keys(data).forEach(key => {Object.defineProperty(that, key, {configurable: true,enumerable: true,get:  function  proxyGetter () { return that._data[key];},set:  function  proxySetter (val) {that._data[key] = val;}})});}我們就可以用app.text 代替 app._data.text 了。 .js來源: 稀土掘金

Vue.js響應式原理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.