使用背景
- 数据变化而导致的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更新后触发此方法。