说明
官方解释:将回调推迟到下一个 DOM 更新周期之后执行。在更改了一些数据以等待 DOM 更新后立即使用它。
案例
实现上面的案例我们有三种方式
方式一(错):在点击按钮后立即获取到h2的高度
确实是先添加内容,再打印,但是实际效果是,打印出来的是界面修改前的高度
方式二:在updated生命周期函数中获取h2的高度
onUpdated是在DOM更新后执行
能实现,但是不一定合适,因为onUpdated可能还有其他的操作,不只是这个获取的操作,其他操作也会触发这个打印。
现在这个只是1条代码还好,如果是几百行的代码,每次其他操作都会触发这些代码,这样就浪费了性能。
我想要的只是这个元素添加内容时打印高度。
当然你可以加入判断,判断只有我这个元素内容改变时打印,但终究不是最好的方案,毕竟onUpdated是共用的。
方式三:使用nexttick函数
把要执行的放在函数里即可,实际原理是,把函数的内容延迟执行,通过Promise实现的,其实就是把函数放在更新DOM的方法执行完后,再执行这个。
Vue内部会维护着好几种队列,为的是方便你按你想要的顺序执行。
源码
我们修改完数据时,会调用flushJobs这个函数
里面有个函数,循环执行修改界面的操作(但不触发DOM变更)
nextTick 就是最后把任务加到上面的最后面