欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

vue $nexttick原理

阮建安1年前9瀏覽0評論

在 Vue.js 中,$nextTick 是一個非常常用的 API,它可以用來讓我們在下次 DOM 更新循環周期之后執行一個回調函數。那么,它的實現原理是怎樣的呢?

當我們執行 $nextTick 的時候,Vue.js 會將回調函數推入一個隊列中,這個隊列會在以后的某個時刻執行。具體而言,它會在下一次的 DOM 更新周期之后執行。那么,什么時候才會觸發 DOM 更新呢?

// 在 Vue.js 中,DOM 更新循環的實現原理如下
Vue.prototype.$nextTick = function(fn?: () =>void): Promise < void > {
const instance = this;
return new Promise((resolve) =>{
if (pending) {
queue.push(() =>{
callPendingFn(instance, resolve, fn);
});
} else {
pending = true;
if (process.env.NODE_ENV !== 'production' && currentFlushTimestamp >0 && !callbacks.length) {
setTimeout(() =>{
if (!callbacks.length || callbacks[callbacks.length - 1].id !== currentFlushTimestamp) {
callbacks.push(() =>{
instance.$nextTick(resolve);
});
currentFlushTimestamp++;
}
}, 0);
} else {
callbacks.push(() =>{
instance.$nextTick(resolve);
});
}
}
});
};

可以看到,DOM 更新循環是通過實現一個回調函數隊列的方式來觸發的。當執行完一個隊列中的回調函數之后,會檢查隊列中是否還有未執行的回調,如果有,就繼續執行,直到隊列中所有的回調都執行完畢。

因此,$nextTick 的實現原理就非常簡單了。它只是將需要在下一個 DOM 更新周期之后執行的回調函數,推入了當前的隊列中。當隊列中所有的回調都執行完畢之后,也就意味著下一個 DOM 更新周期已經完成了,這時候 $nextTick 中的回調函數就會被執行。