1.描述
等待下一次 DOM 更新刷新的工具方法。当你在 Vue 中更改响应式状态时,最终的 DOM 更新并不是同步生效的,而是由 Vue 将它们缓存在一个队列中,直到下一个“tick”才一起执行。这样是为了确保每个组件无论发生多少状态改变,都仅执行一次更新。
nextTick()
可以在状态改变后立即使用,以等待 DOM 更新完成。你可以传递一个回调函数作为参数,或者 await 返回的 Promise。
<script setup>
import { ref, nextTick } from 'vue'
const count = ref(0)
async function increment() {
count.value++
// DOM 还未更新
console.log(document.getElementById('counter').textContent) // 0
await nextTick()
// DOM 此时已经更新
console.log(document.getElementById('counter').textContent) // 1
}
</script>
<template>
<button id="counter" @click="increment">{{ count }}</button>
</template>
2.实际应用场景
<template>
<div>
<button @click="updateList">更新列表</button>
<ul>
<li v-for="i in list">{{i}}</li>
</ul>
</div>
</template>
<script setup>
import {nextTick , ref} from 'vue'
const list = ref(new Array(20).fill(0))
const updateList = ()=>{
list.value.push(...(new Array(10).fill(1)))
nextTick (()=>{ //在nextTick中执行回调
const listItem = document.querySelector('li:last-child')
listItem.scrollIntoView({behavior: 'smooth'})
})
}
</script>
<style lang="css" scoped>
li{
list-style: none;
font-size: 64px;
height: 100px;
background-color: #42b883aa;
margin: 10px;
}
</style>
掌握 nextTick
的作用和实现原理,能够更好地处理 Vue 中的异步更新,提高代码的性能和质量。
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
加入交流群
请使用微信扫一扫!