vue的nextTick函数,当我们触发事件更新dom后,但是没法在vue中立即获取到dom的最新值,这时候就要用到nextTick函数,他可以帮助我们在下一次Dom更新后执行他的回调函数
浏览器事件循环机制
浏览器对于事件的处理是有自己的一套机制,同步代码进入执行栈,异步代码进入异步队列,异步任务分为宏任务和微任务
宏任务与微任务
宏任务是浏览器带来的函数,列如setTimeout、setInterval,这些任务都是宏任务
微任务是语言带来的函数,比如promise的then函数
执行机制
当浏览器执行时,会先执行同步任务,然后执行异步任务,执行异步任务时,会先执行微任务,把微任务队列清空后,再去执行一个宏任务,然后在看此时的微任务队列,如此循环,知道宏任务微任务清空
nextTick执行机制
在vue中更新dom是异步的,当同步任务完成后才会去更新dom,nextTick会把此时的回调添加到异步任务队列中,当dom更新的任务完成后才会去执行nextTick函数
vue的异步更新机制
vue实现响应式并不是说数据一改变,DOM就立即变化。Vue在修改数据后,视图并不是立即更新,而是等同一事件循环中的所有数据变化完成后,再统一进行视图的更新。也就是说vue是异步渲染的
this.msg = ‘1234’。因为在初始化的时候已经做了数据劫持,当对数据进行更新操作时,就会触发 setter 的拦截