当前位置: 首页 > news >正文

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) // 0await 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) // 0nextTick(()=>{// 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博客

相关文章:

  • leetcode 240. 搜索二维矩阵 II
  • [Android]使用Retrofit进行网络请求
  • 含分布式电源的配电网可靠性评估(matlab代码)
  • vue2.0+elementui集成file-loader之后图标失效问题
  • 安徽省广德市选择云轴科技ZStack Cloud云平台建设县级智慧城市
  • SQL注入漏洞发现和利用,以及SQL注入的防护
  • 【精选】Ajax技术知识点合集
  • centos7 系统keepalived 定时执行脚本
  • 百度智能云正式上线Python SDK版本并全面开源
  • SQL Server数据库自动备份方法
  • 机器学习第12天:聚类
  • python二叉树链树_树的链式存储结构
  • yum仓库
  • 第二十章:多线程
  • 【Docker】从零开始:2.Docker三要素
  • Date型的使用
  • HomeBrew常规使用教程
  • java8 Stream Pipelines 浅析
  • javascript 总结(常用工具类的封装)
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • react-native 安卓真机环境搭建
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • SOFAMosn配置模型
  • STAR法则
  • storm drpc实例
  • 构造函数(constructor)与原型链(prototype)关系
  • 关于 Cirru Editor 存储格式
  • 全栈开发——Linux
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​linux启动进程的方式
  • ###C语言程序设计-----C语言学习(3)#
  • ###项目技术发展史
  • #pragma pack(1)
  • $$$$GB2312-80区位编码表$$$$
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (一)Dubbo快速入门、介绍、使用
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .bashrc在哪里,alias妙用
  • .bat批处理(一):@echo off
  • .net mvc部分视图
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .Net接口调试与案例
  • ?
  • @Autowired多个相同类型bean装配问题
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • [Angular 基础] - 指令(directives)
  • [C++] sqlite3_get_table 的使用
  • [C语言]——函数递归
  • [C语言]——柔性数组