广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >一文学会什么是vue.nextTick()
  • 648
分享到

一文学会什么是vue.nextTick()

2024-04-02 19:04:59 648人浏览 安东尼
摘要

目录概念原理举例应该什么时候使用Vue.$nextTick()呢?概念 在下次DOM更新循环结束之后执行延迟回调,在修改数据之后立即使用这个方法,获取更新后的DOM 简单理解: 为了

概念

在下次DOM更新循环结束之后执行延迟回调,在修改数据之后立即使用这个方法,获取更新后的DOM

简单理解:

为了去解决数据更新了但是视图不更新的问题,当数据更新了,在DOM渲染后,自动执行该函数

原理

Vue是异步执行dom更新的,一旦观察到数据变化,Vue就会开启一个队列,然后把在同一个事件循环 (event loop) 当中观察到数据变化的 watcher 推送进这个队列。如果这个watcher被触发多次,只会被推送到队列一次。这种缓冲行为可以有效的去掉重复数据造成的不必要的计算和DOm操作。而在下一个事件循环时,Vue会清空队列,并进行必要的DOM更新。
当你设置 vm.someData = ‘new value’,DOM 并不会马上更新,而是在异步队列被清除,也就是下一个事件循环开始时执行更新时才会进行必要的DOM更新。如果此时你想要根据更新的 DOM 状态去做某些事情,就会出现问题。。为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用 Vue.nextTick(callback) 。这样回调函数在 DOM 更新完成后就会调用。

举例

<template>
  <div>
    <button ref="btn" @click="handleBtn()">{{ message }}</button>
  </div>
</template>
<script>
export default {
  data(){
    return{
      message:'这个是原始值'
    }
  },
  methods:{
    handleBtn:function(){
    let that=this
    that.message='修改后的值'
    console.log(that.$refs.btn.innerText);//这里输出的还是原始值
  }
  }
}
</script>
<style>
</style>

通过例子可以看到这样的话最终输出的值还是原来的值,下面再看一下使用this.$nextTick()会发生什么?

<template>
  <div>
    <button ref="btn" @click="handleBtn()">{{ message }}</button>
  </div>
</template>
<script>
export default {
  data(){
    return{
      message:'这个是原始值'
    }
  },
  methods:{
    handleBtn:function(){
    let that=this
    that.message='修改后的值'
    this.$nextTick(function(){
      console.log(that.$refs.btn.innerText);  //这里输出的是修改后的值
    })
  }
  }
}
</script>
<style>
</style>

通过这个例子就可以明显的看到this.$nextTick()的作用。

注意:

vue实现响应并不是数据发生变化之后DOM立即变化。而是按照一定的策略进行DOM的更新,在使用this.$nextTick()以后,就可以在他的回调中获取到更新后的DOM

应该什么时候使用vue.$nextTick()呢?

  • Vue生命周期的created()钩子函数进行的DOM操作一定要放在Vue.nextTick()的回调函数中,原因是在created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,所以此处一定要将DOM操作的js代码放进Vue.nextTick()的回调函数中。与之对应的就是mounted钩子函数,因为该钩子函数执行时所有的DOM挂载已完成。
  • 项目中你想在改变DOM元素的数据后基于新的dom做点什么,**对新DOM一系列的js操作都需要放进Vue.nextTick()的回调函数中;**通俗的理解是:更改数据后当你想立即使用js操作新的视图的时候需要使用它
<template>
  <div>
    {{ message }}
    <button @click="changeText()">测试</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      message: "这个是原始值",
    };
  },
  methods: {
    changeText () {
      let that = this;
      this.message = "这是修改后的值";
      that.$nextTick(function(){
        let txt=document.getElementById('btn').innerText
        console.log(txt);
        txt==='这个是原始值'? console.log('data的值发生改变时DOM的值没有立即更新') : console.log('data的值发生改变时DOM的值立刻更新了');
      })
    },
  },
};
</script>
<style>
</style>

到此这篇关于一文学会什么是vue.nextTick()的文章就介绍到这了,更多相关vue.nextTick()内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 一文学会什么是vue.nextTick()

本文链接: https://www.lsjlt.com/news/147177.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 一文学会什么是vue.nextTick()
    目录概念原理举例应该什么时候使用vue.$nextTick()呢?概念 在下次DOM更新循环结束之后执行延迟回调,在修改数据之后立即使用这个方法,获取更新后的DOM 简单理解: 为了...
    99+
    2022-11-13
  • vue.nextTick()是什么及怎么用
    这篇文章主要介绍了vue.nextTick()是什么及怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue.nextTick()是什么及怎么用文章都会有所收获,下面我们一起来看看吧。概念在下次DOM更新循...
    99+
    2023-06-30
  • 一文学会VSCode使用python
    目录一、前言二、VSCode配置python1.安装VSCode2.为VSCode设置中文3.为python开发安装插件4.安装代码一键运行插件Code Runner5.Run in...
    99+
    2022-11-12
  • 一文学会 SpringMVC 拦截器
    ✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:...
    99+
    2023-08-17
    java spring servlet
  • 一文学会数据结构-堆
    目录1.堆2.堆的实现2.1堆的向下调整算法(建小堆)2.2 堆向下调整算法(建小堆)实现2.3 堆的向上调整算法2.4 向上调整算法(建小堆)实现2.5 数组建堆算法(建小堆)2....
    99+
    2022-11-12
  • 一文教你学会Redis的事务
    目录Redis 中的使用开始事务命令入队执行事务discard 命令watch 命令事务异常命令错误运行时异常事务的 ACID原子性一致性隔离性持久结语Redis 作为内存的存储中间...
    99+
    2022-11-13
    Redis 事务
  • 一文学会 Spring MVC 表单标签
    ✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:...
    99+
    2023-08-21
    spring mvc java
  • 一文学会 CentOS7 安装配置 Redis
    ✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏:...
    99+
    2023-08-24
    redis java spring boot
  • 一文学会处理SpringBoot统一返回格式
    目录背景SpringBoot Controller 常见的返回格式String自定义对象正常返回错误返回定义返回对象定义状态枚举统一处理返回值及异常void 无返回值有返回值背景 相...
    99+
    2022-11-13
    SpringBoot统一返回格式  统一返回格式
  • 一文学会Java运算符的使用
    目录算术运算符关系运算符逻辑运算符赋值运算符条件运算符运算符优先级算术运算符 运算符描述+两数相加-两数相减*两数相乘/两数相除%取模,返回两数相除的余数++自加一- -自减一 pu...
    99+
    2022-11-13
  • 一文学会docker 安装mysql的方法
    目录1、使用 docker 命令下载 mysql2、使用 docker 命令创建实例并启动;3、修改 mysql 配置文件;4、重新启动 mysql;1、使用 docker 命令下载...
    99+
    2022-11-13
  • 一文带你学会Java事件机制
    目录委托事件模型核心组件总结相信做 Java 开发的朋友,大多都是学习过或至少了解过 Java GUI 编程的,其中有大量的事件和控件的绑定,当我们需要在点击某个按钮实现某些操作的时...
    99+
    2022-11-12
  • 一文带你学会Spring JDBC的使用
    目录1、JDBC2、使用2.1、配置数据源2.2、HikariCP2.3、JdbcTempLate1、JDBC JDBC 就是 数据库开发 操作的 代名词,因为只要是现代商业项目的开...
    99+
    2022-11-13
  • 一文带你学会Java网络编程
    目录1.java网络编程概述2.InetAddress类3.Socket 编程4.TCP编程TCP字节流编程TCP字符流编程5.网络上传文件6.TCP文件下载1.java网络编程概述...
    99+
    2022-11-13
    Java网络编程 Java 网络
  • 一文带你学会使用PHP接口
    目录1. 概念2. 定义3. 实现4. 使用5. 使用场景5.1 多态性5.2 类型约束5.3 模块化编程6. 总结PHP 中的 Interface 是一种非常重要的特性,它允许开发...
    99+
    2023-05-18
    PHP 接口 PHP Interface
  • 一文学会使用Remix写API接口
    目录本文提要接口种类RESTful API 特点Remix 中如何处理 api 特点Loader 函数处理 Get 请求action 处理非 GET 方法添加控制层和服务层暴露 lo...
    99+
    2023-05-15
    Remix API接口 Remix API
  • 一文带你学会MySQL的select语句
    目录SQL概述SQL背景知识SQL语言排行榜SQL 分类SQL语言的规则与规范基本规则SQL大小写规范 (建议遵守)注释命名规则(暂时了解)数据导入指令基本的SELECT语句SELECT...SELECT ......
    99+
    2022-11-08
  • 一文学会使用OpenCV构建文档扫描仪
    目录介绍执行形态学操作从捕获的图像中删除背景边缘和轮廓检测识别角点标准化四点定位寻找目的地坐标:透视变换测试观察结论总结:介绍 在本文中,我们将使用 OpenCV 库来开发 Pyth...
    99+
    2022-11-11
  • 一文带你学会python新年倒计时
    作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。   座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 目录 前言 一.新年介绍 二.代码介绍 1.应用的技术 (1)Py...
    99+
    2023-09-12
    python pygame 开发语言
  • 一篇文章学会Vue中间件管道
    通常,在构建SPA时,需要保护某些路由。例如假设有一个只允许经过身份验证的用户访问的 dashboard 路由,我们可以通过使用 auth 中间件来确保合法用户才能访问它。 在本教程...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作