vue3的 nextTick()的使用

引言:

当你修改了响应式状态时,DOM 会被自动更新。但是需要注意的是,DOM 更新不是同步的。Vue 会在"next tick"更新周期中缓冲所有状态的修改,以确保不管你进行了多少次状态修改,每个组件都只会被更新一次。

要等待 DOM 更新完成后再执行额外的代码,可以使用 nextTick() 全局 API:

复制代码
import { nextTick } from 'vue'

async function increment() {
  count.value++
  await nextTick()
  // 现在 DOM 已经更新了
}

一句话,总结一下就是:当数据更新以后,在dom中完成渲染之后,自动执行该函数。

nextTick() 等待下一次DOM更新刷新的工具方法。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>

或者

复制代码
<script setup>
import { ref, nextTick } from 'vue'

const count = ref(0)

async function increment() {
  count.value++

  // DOM 还未更新
  console.log(document.getElementById('counter').textContent) // 0

  nextTick(()=>{
     // DOM 此时已经更新
     console.log(document.getElementById('counter').textContent) // 1
  })
  
}
</script>

<template>
  <button id="counter" @click="increment">{{ count }}</button>
</template>

需要注意的是,虽然 nextTick() 方法可以解决异步更新导致的问题,但如果过度使用该方法会导致性能问题。因此,在实际开发中,只有在必要的情况下才应该使用 nextTick() 方法。

参考传送门:[5.7 Vue中this.nextTick()方法的使用及代码示例-CSDN博客](https://blog.csdn.net/qq_40805441/article/details/130860183 "5.7 Vue中this.nextTick()方法的使用及代码示例-CSDN博客")

相关推荐
掘金一周16 分钟前
吃龙虾🦞咯!万字拆解OpenClaw的架构与设计 | 掘金一周 3.19
前端·人工智能·后端
kyriewen21 分钟前
JavaScript 数据类型全家福:谁是大哥大,谁是小透明?
前端·javascript·ecmascript 6
用户86312633276829 分钟前
假设我要实现一个agent群体
前端
凉辰34 分钟前
uniapp实现生成海报功能 (开箱即用)
javascript·vue.js·小程序·uni-app
console.log('npc')37 分钟前
pnpm使用
前端·npm
OpenTiny社区43 分钟前
TinyRobot Skills技巧大公开:让 AI 成为你的 “UI 搭建”副驾驶
前端·vue.js·ai编程
土豆12501 小时前
Rust 实战:手把手教你开发一个命令行工具
前端·rust
Moment1 小时前
2026年,TypeScript还值不值得学 ❓❓❓
前端·javascript·面试
林九生1 小时前
【Vue3】解决 Tailwind CSS v4 + Vite 8 中 `@import “tailwindcss“` 不起作用的问题
前端·css
陈随易1 小时前
AI时代,说点心里话
前端·后端·程序员