關於nextTick的理解

2022-07-16 21:51:22 字數 1469 閱讀 2523

首先先看一下官方的解釋:

this.$nexttick()將**延遲到下次 dom 更新迴圈之後執行。在修改資料之後立即使用它,然後等待 dom 更新。它跟全域性方法 vue.nexttick 一樣,不同的是**的 this 自動繫結到呼叫它的例項上。

我的理解:在this.$nexttick外面,獲取的資料有可能已經改變了但是獲取的時候還是之前的值,但是在this.$nexttick裡面只要獲取的資料發生改變,獲取的時候就是改變了之後的資料

具體看**吧

執行結果可以知道:

在333之前改變了msg的值,但是獲取表單資料的時候還是之前的123123

但是在nexttick裡面獲取的時候就發生了改變

且表單渲染的結果也是更新之後的

具體原因是由於,將msg改變值之後們雖然資料層發生了變化,但是dom層未更新,但是nexttick裡面會在dom更新之後立馬使用,所以得到的資料就是比較新的資料。

下面說一下js的巨集任務和微任務

巨集任務macro task: settimeout、messagechannel、postmessage、setimmediate

微任務micro task: mutationobsever 和 promise.then

在vue2.5之後哦的版本,nexttick就屬於巨集任務了

測試**:

created()  鉤子中呼叫,或者在 this.$nexttick(()=>{}) 中呼叫

console.log(111

); console.log(

this

.$refs.hello);

this.$nexttick(() =>);

var promise= new

promise(function (resolve,reject) )

console.log(promise)

},

測試結果:

出現這樣的結果是因為:

先執行主線程的任務,當主線程的任務執行完了之後,由於promise是微任務,nexttick是巨集任務,微任務的優先順序要高於巨集任務,所以會先執行微任務裡面的內容,等到微任務執行完了之後在執行巨集任務內容

理解 nextTick 的作用

有同學在看 vue 官方文件時,對 api 文件中的 vue.nexttick 和 vm.nexttick 的作用不太理解。其實如果看一下深入響應式原理 vue.js中的有關內容,可能會有所理解,不過有些同學可能看到這個標題之後就選擇跳過了,因此這裡簡述如下 vue 實現響應式並不是資料發生變化之後...

關於vue中的nextTick深入理解

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

關於Vue的nextTick的一點小理解

官方文件表示 為了在資料變化之後等待vue完成更新dom,可以在資料變化之後立即執行vue.nexttick callback 這樣 函式就可以在資料變化之後立即執行。這段話的意思是 例如 存在 假如此時message的值是 hi當我們對data 中的值進行賦值修改時 例 this.message ...