Vue 響應式原理 3-3

概念

結(jié)論:
Vue 在更新 DOM 時是異步執(zhí)行的

流程:
1.只要偵聽到數(shù)據(jù)變化,Vue 將開啟一個隊列,并緩沖在同一事件循環(huán)中發(fā)生的所有數(shù)據(jù)變更
2.如果同一個 watcher 被多次觸發(fā),只會被推入到隊列中一次。
性能優(yōu)化,這種在緩沖時去除重復數(shù)據(jù)對于避免不必要的計算和 DOM 操作是非常重要的
3.在下一個的事件循環(huán)“tick”中,Vue 刷新隊列并執(zhí)行實際 (已去重的) 工作。

異步事件更新2

(↑ 自己理解的數(shù)據(jù)更新意思)

Vue 在內(nèi)部對異步隊列嘗試使用原生的 Promise.then、MutationObserver 和 setImmediate,
如果執(zhí)行環(huán)境不支持,則會采用 setTimeout(fn, 0) 代替。

異步隊列操作的語法

MutationObserver
setImmediate


語法解釋
在工作中意義何在? 【獲取更新后的 DOM 狀態(tài)】

多數(shù)情況我們不需要關心這個過程,但是如果你想基于更新后的 DOM 狀態(tài)來做點什么,這就可能會有些棘手。
雖然 Vue.js 通常鼓勵開發(fā)人員使用“數(shù)據(jù)驅(qū)動”的方式思考,避免直接接觸 DOM,但是有時我們必須要這么做。

通過Vue全局方法和實例方法,我們可以獲取到更新后的時間節(jié)點
入口函數(shù)中,可以使用全局方法:Vue.nextTick(fn)
單頁面組件中,可以使用實例方法:vm.$nextTick()

官方例:
全局方法

<div id="example">{{message}}</div>

var vm = new Vue({
  el: '#example',
  data: {
    message: '123'
  }
})
vm.message = 'new message' // 更改數(shù)據(jù)
vm.$el.textContent === 'new message' // false
Vue.nextTick(function () {
  vm.$el.textContent === 'new message' // true
})

實例方法

<div id="example">{{message}}</div>

Vue.component('example', {
  template: '<span>{{ message }}</span>',
  data: function () {
    return {
      message: '未更新'
    }
  },
  methods: {
    updateMessage: function () {
      this.message = '已更新'
      console.log(this.$el.textContent) // => '未更新'
      this.$nextTick(function () {
        console.log(this.$el.textContent) // => '已更新'
      })
    }
  }
})
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 現(xiàn)在是時候深入一下了!Vue 最獨特的特性之一,是其非侵入性的響應式系統(tǒng)。數(shù)據(jù)模型僅僅是普通的 JavaScrip...
    youins閱讀 818評論 0 3
  • 前言 Vue.js 的核心包括一套“響應式系統(tǒng)”。 “響應式”,是指當數(shù)據(jù)改變后,Vue 會通知到使用該數(shù)據(jù)的代碼...
    NARUTO_86閱讀 37,777評論 8 86
  • 如何追蹤變化? 把一個js對象傳遞給Vue實例的data選項,Vue將遍歷此對象的所有屬性,并通過 Object...
    hello_water閱讀 1,173評論 0 4
  • ??Vue很好用的一點是響應式系統(tǒng)(reactivity system)。模型層(model)只是普通JS對象,修...
    小小的開發(fā)人員閱讀 2,570評論 0 12
  • 前言 Vue.js 的核心包括一套“響應式系統(tǒng)”。 “響應式”,是指當數(shù)據(jù)改變后,Vue 會通知到使用該數(shù)據(jù)的代碼...
    world_7735閱讀 1,006評論 0 2

友情鏈接更多精彩內(nèi)容