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

this.$nextTick()的理解及使用

将回调延迟到下次 DOM 更新循环之后执行。

在修改数据之后立即使用它,
然后等待 DOM 更新。
它跟全局方法 Vue.nextTick 一样,
不同的是回调的 this 自动绑定到调用它的实例上。

代码看看

<template>
  <section>
    <h1 ref="hello">{{ value }}</h1>
    <button type="danger" @click="get">点击</button>
  </section>
</template>
<script>
export default {
  data() {
    return {
      value: "Hello World ~",
    };
  },
  methods: {
    get() {
      this.value = "你好啊";
      console.log(this.$refs["hello"].innerText); // Hello World ~
      // 如果直接这样打印,打印出来的结果不是我们想要的  "你好啊";,而是 Hello World ~,因为this.value = ‘ Hello World ~’ 它是异步的
      this.$nextTick(() => {
        console.log(this.$refs["hello"].innerText); // 你好啊
      });
    },
  },
  mounted() {},
  created() {},
};
</script>

在这里插入图片描述
在这里插入图片描述
对比一下点击前后的结果就知道

他就是等你
页面dom中的数据渲染完之后,再执行回调函数中的方法。

vue中数据和dom渲染由于是异步的

this.$nextTick()方法主要是用在随数据改变而改变的dom应用场景中,
vue中数据和dom渲染由于是异步的,
所以,要让dom结构随数据改变这样的操作都应该放进this.$nextTick()的回调函数中。

created()中使用的方法时,dom还没有渲染,如果此时在该钩子函数中进行dom赋值数据(或者其它dom操作)时无异于徒劳,
所以,此时this.$nextTick()就会被大量使用,而与created()对应的是mounted()的钩子函数则是在dom完全渲染后才开始渲染数据,
所以在mounted()中操作dom基本不会存在渲染问题。

当然在项目中也是常常用到的

例如我在查询之后会进行回调延迟到下次 DOM 更新循环之后执行

getMyEvcMcuInfo() { // 查询表格数据
      const { area, segmentId, timeDate } = this.navFormInfo.data
      if (!area[2] || !timeDate[1]) {
        this.$message.warning('请选择场区和时间段!')
        return
      }
      const params = {
        fieldId: area[2],
        segmentId,
        state: '',
        startTime: timeDate[0],
        endTime: timeDate[1],
        feederName: ''
      }
      const element = pageElement['findBatchNoUsingPower']
      this.isLoading = true
      this.$httpRequest({
        type: element?.method,
        uri: element?.uri,
        payload: params,
        callback: res => {
          this.isLoading = false
          console.log('获取的table列表---', res)
          if (res.status === 200 && res.rel) {
            const list = res.data.batchNoUsingPowerVos
            this.tableData = list
            if (list.length > 0) {
              this.myChart = this.$echarts.init(this.$refs.myChart)
              this.$nextTick(() => { // 请求成功之后,在这里执行
                this.initChart()
              })
            }
          }
        }
      })
    },

相关文章:

  • codeforces 700A
  • Web学习笔记
  • 双向数据绑定原理 vue2.0 与 vue3.0
  • HDU 1232 畅通工程 并查集
  • Duilib创建窗口双击标题栏禁止窗口最大化
  • 数据处理四舍五入,保留两位小数
  • 家长需要反复领悟的33句话
  • 导航栏的字体颜色的设置小收集
  • nrm ls执行不成功,显示node:internal/validators:119 throw new ERR_INVALID_ARG_TYPE(name, ‘string‘, value)
  • 基于LDAP下的Samba服务
  • 前端 项目里 常用的判断语句 有实例
  • mysql 主从同步
  • 张掖百公里,再次折戟
  • 前端 封装 时间转换
  • 封装一个接口方法,根据条件,调用不同接口数据
  • JavaScript实现分页效果
  • node-glob通配符
  • React中的“虫洞”——Context
  • 从零开始的无人驾驶 1
  • 给初学者:JavaScript 中数组操作注意点
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 马上搞懂 GeoJSON
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 思维导图—你不知道的JavaScript中卷
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • Android开发者必备:推荐一款助力开发的开源APP
  • 阿里云服务器购买完整流程
  • ​ssh免密码登录设置及问题总结
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • # 飞书APP集成平台-数字化落地
  • (02)Hive SQL编译成MapReduce任务的过程
  • (6)【Python/机器学习/深度学习】Machine-Learning模型与算法应用—使用Adaboost建模及工作环境下的数据分析整理
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (编译到47%失败)to be deleted
  • (第一天)包装对象、作用域、创建对象
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • .java 9 找不到符号_java找不到符号
  • .Net core 6.0 升8.0
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .NET 解决重复提交问题
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • [ IO.File ] FileSystemWatcher
  • [ web基础篇 ] Burp Suite 爆破 Basic 认证密码
  • [Android]How to use FFmpeg to decode Android f...
  • [C#]winform制作圆形进度条好用的圆环圆形进度条控件和使用方法
  • [emuch.net]MatrixComputations(7-12)
  • [FROM COM张]如何解决Nios II SBTE中出现的undefined reference to `xxx'警告