Q: Vue 的 nextTick 是干什么用的?原理是什么?是宏任务还是微任务?
Vue 的 DOM 更新是异步的。
当你 this.text = 'new' 时,Vue 不会理解更新 DOM,而是开启一个异步队列。
它会把同一事件循环中的所有数据变更合并,只执行一次 DOM 更新(性能优化)。
问题:如果你修改数据后立刻 document.querySelector,拿到的是旧 DOM。
解决:nextTick(cb) 等待 DOM 更新完后再执行回调。
Vue 内部维护一个 callbacks 数组。
优先使用微任务 (Microtask) 来执行这些 callback,因为微任务在当前宏任务结束后立刻执行,UI 渲染更及时。
降级策略 (Vue 2):
Vue 3:不再考虑兼容 IE,直接统一使用 Promise (微任务)。
created 钩子中如果想操作 DOM(虽然不推荐),必须包裹在 nextTick 里,因为此时 DOM 还没挂载。