首页 > 其他分享 >Vue 中$nextTick

Vue 中$nextTick

时间:2022-12-23 21:14:13浏览次数:69  
标签:nextTick Vue console log DOM 更新

语法

// 回调函数中 this 为当前组件 VueComponent
this.$nextTick(回调函数)

作用

在下一次 DOM 更新结束后执行其指定的回调。 这样说其实有点难以理解,DOM更新结束后是什么时候?难道数据变了,DOM没变吗? 先上代码
<template>
  <div id="app">
    <h1 ref="test">{{ a }}</h1>
    <button @click="refresh ()">点我+</button>
  </div>
</template>
<script>
export default {
  name: 'App',
  data(){
    return {
      a:1
    }
  },
  methods:{
    refresh(){
      this.a++
      console.log("before:" + this.$refs.test.innerHTML);  // 1
      this.$nextTick(()=>{
        console.log("$nextTick:" + this.$refs.test.innerHTML); // 2
      })
      console.log("after:" + this.$refs.test.innerHTML); // 1
    }
  },
}
</script>

 

 上图进行了一个点击按钮由数字由 1 => 2 的过程,可以看出,确实是数据变了,DOM还没变。

根据顺序,首先可以判断出这是一个异步的过程,根据深入响应式原理 - vue.js,Vue 实现响应式并不是数据发生变化之后 DOM 立即变化,而是按一定的策略进行 DOM 的更新。

$nextTick 是在下次 DOM 更新循环结束之后执行延迟回调,在修改数据之后使用 $nextTick,则可以在回调中获取更新后的 DOM,API 文档中官方示例如下:

Vue.component('example', {
  template: '<span>{{ message }}</span>',
  data: function () {
    return {
      message: '未更新'
    }
  },
  methods: {
    updateMessage: function () {
      this.message = '已更新'
      console.log(this.$el.textContent) // => '未更新'
      this.$nextTick(function () {
        console.log(this.$el.textContent) // => '已更新'
      })
    }
  }
})

 

标签:nextTick,Vue,console,log,DOM,更新
From: https://www.cnblogs.com/xt112233/p/17001576.html

相关文章

  • vue3的setup函数的使用
     setup的使用:1.setup函数时,它将接受两个参数:(props、context(包含attrs、slots、emit))context包含三个参数,可通过解构方式写context该上下文对象是非响应式的,可以安......
  • Vue + SpreadJS 实现高性能数据展示与分析
    Vue+SpreadJS实现高性能数据展示与分析在前端开发领域,表格一直都是一个高频使用的组件,尤其是在中后台和数据分析场景下。但当一屏展示数据超过1000条数据记录时,会出现......
  • ag-grid-vue在排班组件中的使用
    在很多医务系统中,会有医生护士排班的业务,比如下面这种:   可是实现排班数据的上移,下移,并且能够通过右键菜单实现排班等操作;直接上源码:首先安装依赖:npminstall a......
  • Day19_06_Vue教程之Vue实例的生命周期
    Vue教程之Vue实例的生命周期一.什么是生命周期Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载DOM、渲染→更新→渲染、卸载等一系列过程,我们......
  • vue3 ref 传参
    1 子组件Demo里:<scriptsetup>import{ref}from'vue'letceshi=ref(520)defineExpose({//通过defineExpose将子组件内部数据暴露给父组件!!!!c......
  • vue安装node-sass提示没有vendor目录及binding.node文件的解决办法
    vue安装node-sass提示没有vendor目录及binding.node文件的解决办法一.异常现象我在网上下载了一个开源的vue项目,然后执行如下命令:npmrundev结果产生如下图所示异常信息:......
  • vue大文件上传详解及实例代码
    ​我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。 这次项目的需求:支持大文件的上传和续传,要求续传......
  • Vue 自定义事件
    组件的自定义事件使用场景A是父组件,B是子组件,B想给A传数据,那么就要在A中给B绑定自定义事件(事件的回调在A中)绑定自定义事件在父组件中:<HelloWorld@customEv......
  • Java和vue开发的橱柜定制系统家具定制系统
    简介橱柜定制家具定制系统。用户查看家具样本,进行预约下单,后台人员根据用户的要求给出效果图和方案,以及报价,填写上门时间。管理员上门测量和用户确定好需求后上传协议,此时......
  • java和vue的学生健康管理系统疫情打卡系统
    需求:关注学生健康数据以及疫情打卡系统分两个角色:学生和管理员演示视频https://www.bilibili.com/video/BV1iD4y1h74F/?share_source=copy_web&vd_source=ed0f04fbb7131......