首页 > 技术文章 > 关于nextTick

heisetianshi 2022-03-17 18:30 原文

我们都知道nextTick是用来实现异步更新dom的。下边通过小案例一步步分析。

案例之前先插入一段内容,来证明nextTick确实是异步任务。

                             

没毛病,先执行同步,后执行了异步nextTick。

1、当我们设置 ref,通过this.$refs修改dom元素的内容时,会输出什么?

<button @click="Btn" ref="btn">oldText</button>
Btn() {
      this.$refs.btn.innerHTML = "newText";
      console.log(this.$refs.btn.innerHTML);
}

结果:页面和打印的数据是一样的,因为直接修改的是dom。

 

 2、直接 赋值修改data中的变量,然后通过ref获取dom,会发生什么?

 <button @click="Btn" ref="btn">{{ text }}</button>
Btn() {
      this.text = "newText";
      console.log(this.$refs.btn.innerHTML);
}

结果:页面和打印结果不一致,因为直接修改的是data中的数据,dom未更新,所以通过ref获取dom元素,会发现值和data更新后的值不一样。

 

 3、对于步骤二的问题,可以用nextTick来处理。

Btn() {
      this.text = "newText";
      this.$nextTick(() => {
        console.log(this.$refs.btn.innerHTML);
      });
}

结果:页面和打印的数据是一样的。故可以说nextTick实现了dom的异步更新渲染。

 

推荐阅读