Skip to content

nextTick

为了保证多次修改数据只更新一次视图,Vue 采用了异步更新的策略,每次修改数据,会将 DOM 操作放到异步队列中, 所有同步操作完成后,在清除队列,nextTick 就是把回调加入到异步队列中,方便获取到更新后的 DOM。

实现原理

js
let pending = false;
const callbacks = [];

function nextTick(cb) {
  callbacks.push(cb);
  if (!pending) {
    pending = true;
    Promise.resolve().then(flushCallbacks);
  }
}

function flushCallbacks() {
  pending = false;
  const copies = callbacks.slice(0);
  callbacks.length = 0;
  copies.forEach(cb => cb());
}