关于vue2.0的this.$nextTick的执行时机

额!先一句话总结一下吧

       this.$nextTick传入的函数和触发某个dom更新的函数时放在同一个队列里面的。

        不想写代码了,下面贴源码,并勾出来给大家看吧

vue的dom异步更新原理的源码

当修改data里面的数据时会经过setter去执行queueWatcher把对应watcher放入queue这个队列,

然后把flushSchedulerQueue这个函数(flushSchedulerQueue这个函数循环遍历queue这个队列来循环执行对应的watcher.run函数等)传入ntexttick这个函数(没错nexttick这个函数就是this.$nextTick这个函数nexttick源码再下面第二张图和第三张图)并执行nexttick这个函数

然后咱们再看this.$nextTick的源码

通过nexttick源码可以看到在第一图中dom更新原理调用nexttick函数传入的flushSchedulerQueue这个函数其实又放到了callbacks这个队列里面,而我们通过调用this.$nextTick传入的函数也放入callbacks队列里面,然后再看timerFunc这个函数和flushCallbacks这个函数,flushCallbacks这个函数就是循环遍历callbacks里面函数并执行后清空队列callbacks,而timerFunc就是把flushCallbacks这个函数放到异步任务里面去执行的。

通过以上代码能得到以下几点

        1. dom更新和this.$nextTick传入的函数的执行都是异步的

        2.如果想要在this.$nextTick中获取修改后的data中数据,在同一个上下文中要放在修改数据之后

<div id="div">{{a}}</div>

this.$nextTick(() =>{ 

获取还是a的原始值

console.log(document.getElementById('div').innerHTML)

})

this.a = 100

this.$nextTick(() =>{

获取的时100

console.log(document.getElementById('div').innerHTML)

})

第一次写,如有错误请大家指正

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值