-----本文作者:Villin-----
$nextTick()用法:
this.$nextTick(),在下次 DOM 更新循环结束之后执行延迟回调。
什么意思?
来看一个简单的小例子,感受一下 $nextTick() 是干嘛的:
两个div,一个button按钮
<div ref="onediv">{{ onediv }}</div> 第一个div<div>{{ twodiv }}</div> 第二个div<button @click="handleClick">点击我将000改成456</button>将一个div默认值设为123,第二个默认值设为000
data() { return { onediv: "123", twodiv: "000" }; }当我点击按钮的时候,将第一个div的值123改变成456,同时获取到div改变后的值456,赋给第二个div。也就是说结果两个div都应该为456.
methods: { handleClick() { this.onediv = "456"; this.twodiv = this.$refs.onediv.innerHTML; // 通过原生$ref获取到第一个div改变后的值,然后赋给第二给div console.log(this.twodiv); } }我们点击后查看

我们发现,第一个div确实是改变了,但是第二个div获取到的值却是第一个div之前的值,因为Dom还没有更新循环完,所以它的值还是123。回过头看一下 $nextTick 的用法介绍,就知道了,所以这个时候我们想获取到div更改后的值,就需要用到 $nextTick。我们用 $nextTick 将它包裹起来,等到Dom节点渲染循环完,我们再取值,再赋值。
methods: { handleClick() { this.onediv = "456"; this.$nextTick(() => { this.twodiv = this.$refs.onediv.innerHTML; // 通过原生$ref获取到第一个div改变后的值,然后赋给第二给div console.log(this.twodiv); }); } }
其实this.$nextTick用法到这里也就完了,我们也可以按照nextTick的中文意思(节点的下一步)来真正理解它的含义了,也就是等到Dom节点结束后再执行下一步的操作。那么我再多说一些:
刚才的案例,同时也说明了一个问题,Vue 在更新 DOM 时是异步执行的。所以this.$nextTick是处理异步的一个回调函数,它返回的是一个promise对象,那么我们这个代码也可以用promise来改写,我们可以用 ES7 async/await 语法完成相同的事情:
methods: { async handleClick() { this.onediv = "456"; await this.$nextTick(); // await 等待返回值后,再执行下面的事情。 this.twodiv = this.$refs.onediv.innerHTML; // 通过原生$ref获取到第一个div改变后的值,然后赋给第二给div console.log(this.twodiv); } }结果也是一样的。
继续阅读与本文标签相同的文章
-
消灭 Java 代码的“坏味道”
2026-05-17栏目: 教程
-
都听我的,会养猪种菜的工程师最帅了!
2026-05-17栏目: 教程
-
使用Bean Validation 2.0定义方法约束
2026-05-17栏目: 教程
-
Java Bean 校验 API
2026-05-17栏目: 教程
-
从零开始入门 K8s | 可观测性:你的应用健康吗?
2026-05-17栏目: 教程
