Vue 更新 DOM 是异步的:修改响应式数据后,Vue 会把渲染工作合并到微任务队列,而不是立刻操作 DOM。所以紧跟在数据修改之后的同步代码去读 DOM,拿到的还是旧值。nextTick 把回调推迟到这一轮更新刷入 DOM 之后,因此能稳定读到更新后的节点。
最典型的用途是与第三方库对接:数据驱动列表变化后,要等 DOM 更新完成才能调用插件做初始化或测量高度。它返回 Promise,可以直接 await。理解它本质上就是理解 Vue 的渲染节奏——先改数据,再等微任务里的一帧,最后 DOM 才是新的。
import { ref, nextTick } from 'vue'; const list = ref(['a']); async function addItem() { list.value.push('b'); console.log('同步读 DOM:列表还是旧的'); await nextTick(); console.log('现在 DOM 已更新,可以测量高度或初始化插件'); }