理解 nextTick 的作用

2022-08-12 22:36:16 字數 1123 閱讀 1162

有同學在看 vue 官方文件時,對 api 文件中的 vue.nexttick 和 vm.$nexttick 的作用不太理解。

其實如果看一下深入響應式原理 - vue.js中的有關內容,可能會有所理解,不過有些同學可能看到這個標題之後就選擇跳過了,因此這裡簡述如下:

vue 實現響應式並不是資料發生變化之後 dom 立即變化,而是按一定的策略進行 dom 的更新。

$nexttick 是在下次 dom 更新迴圈結束之後執行延遲**,在修改資料之後使用 $nexttick,則可以在**中獲取更新後的 dom,api 文件中官方示例如下:

new vue()

}}})

有些同學可能不大理解什麼叫 dom is now updated,在深入響應式原理 - vue.js中的示例情況也比較罕見,vue 模板中直接在根無素中進行插值,然後在例項方法中使用了 this.$el.textcontent 來獲得更新之後的 dom。

為了更好地理解這一點,修改示例如下:

模板——

}div>

message got outside $nexttick: }div>

message got inside $nexttick: }div>

message got outside $nexttick: }div>

change the message

button>

div>

vue 例項化——

new vue(,

methods: )

this.msg3 = this.$refs.msgdiv.innerhtml

}}})

點選按鈕前的介面:

點選按鈕之後,介面如下,注意觀察三個條件渲染的結果之間的差異。

看完這個示例,也許有人會問,我在 vue 例項方法中修改了資料,然後再在 $nexttick **中獲取該資料在相應 dom 元素所繫結的內容(或屬性)殊無必要,我為什麼需要這樣的 api 呢?

考慮這樣一種場景,你有乙個 jquery 外掛程式,希望在 dom 元素中某些屬性發生變化之後重新應用該外掛程式,這時候就需要在 $nexttick 的**函式中執行重新應用外掛程式的方法。

關於nextTick的理解

首先先看一下官方的解釋 this.nexttick 將 延遲到下次 dom 更新迴圈之後執行。在修改資料之後立即使用它,然後等待 dom 更新。它跟全域性方法 vue.nexttick 一樣,不同的是 的 this 自動繫結到呼叫它的例項上。我的理解 在this.nexttick外面,獲取的資料有可...

簡單理解vue中的nextTick

vue是非同步渲染的,當data改變之後,dom不會立刻被渲染,頁面渲染時會將data的修改做整合,多次data修改只會做整合最後一次性渲染出來,這也是非同步渲染的原因。只有非同步渲染才可以實現整合操作。methods 在你的 vue 檢視中,testnum 會發生變化。不過需要注意的是這個變化的過...

關於vue中的nextTick深入理解

nexttick的由來 由於vue的資料驅動檢視更新,是非同步的,即修改資料的當下,檢視不會立刻更新,而是等同一事件迴圈中的所有資料變化完成之後,再統一進行檢視更新。nexttick的觸發時機 在同一事件迴圈中的資料變化後,dom完成更新,立即執行nexttick callback 內的 應用場景 ...