vue中的nextTick使用

104 阅读1分钟

使用背景

  • 数据变化而导致的dom更新是异步的。
    • vue的特点:数据驱动视图(响应式),即数据改变会导致视图(页面上的DOM)更新,但是这个过程是异步的。

示例

<template>
  <div>
  <p id="num">数字: {{ count }}</p>
  <button @click="btn">点击+1, 观察打印</button>
  </div>
</template>

<script>
  export default {
    data() {
      return {
        count: 0,
      };
    },
    methods: {
      btn() {
        this.count++; // 数字添加后, 异步更新DOM, 所以马上获取标签的值还是0
        console.log(document.getElementById('num').innerHTML); // 0
      }
    },
  };
</script>

nextTick使用场景

在js代码中,修改数据之后,希望随后拿到最新的DOM。

代码

methods: {
    btn() {
        this.count++; // 数字添加后, 异步更新DOM, 所以马上获取标签的值还是0
        console.log(document.getElementById('num').innerHTML); // 0
        this.$nextTick(() => {
            console.log("DOM更新后触发$nextTick函数");
            console.log(document.getElementById('num').innerHTML); // 1
        })
    },
  },

dom是异步更新的, $nextTick可以等待dom更新后触发此方法。