首先先看一下官方的解釋:
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 ...