Vue2.0 $nextTick源码理解

Vue2.0 的 $nextTick 涉及JavaScript执行机制,尤其是微任务和宏任务。它用于异步更新视图,确保在所有突变完成后一次性执行队列中的更新操作。在watcher对象的update方法中,通过queueWatcher管理队列,利用Promise保证数据更新在微任务中完成,以减少UI渲染次数。$nextTick函数根据是否存在回调函数决定执行策略,确保回调函数按正确顺序和时机执行,同时优化性能,避免重复的watcher.update操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

$nextTick的原理其实就是Js执行机制的问题,即微任务和宏任务那套东西。

同步视图更新:每次属性值改变,渲染函数的watcher会重新求值完成重新渲染,所以多个属性值修改会导致对此重新渲染。

异步视图更新:将执行更新操作的watcher放进一个队列中,并通过id避免重复放入,然后当所有突变完成后,再一次性执行队列里的观察者的更新方法,同时清空队列。

所以再wacther对象的update方法里,可以看到:

update () {
  /* istanbul ignore else */
  if (this.computed) {
    // 省略...
  } else if (this.sync) {
    this.run()
  } else {
    queueWatcher(this)
  }}

queueWatcher函数做的就是:

1、首先判断进来的watcher是否已有,没有就标记一下它的id是true;

2、当队列没有执行update时,就把新来的watcher丢到队列尾部,如果正在更新,就插入队列,保证执行顺序;

3、执行nextTick(flushSchedulerQueue)。

nextTick如何实现

Vue里的$nextTick其实就是对nextTick(fn, this)函数的封装。js的事件循环是在调用栈里拿一次宏任务执行,然后再对对应的微任务对应执行完毕,再去执行下一次宏任务。宏任务之间可能会穿插UI重渲染,所以最

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值