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

 更新时间:2022年04月24日 17:11:41   作者:清城幻影  
这篇文章主要介绍了一文学会什么是vue.nextTick(),下面文章围绕主题的相关资料展开详细内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

概念

在下次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()内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • vue3中实现组件通信的方法总结

    vue3中实现组件通信的方法总结

    在Vue3中,有多种方法可以实现组件之间的通信,本文就通过代码示例给大家总结一些vue3实现组件通信的常用方法,需要的朋友可以参考下
    2023-06-06
  • 关于在vue 中使用百度ueEditor编辑器的方法实例代码

    关于在vue 中使用百度ueEditor编辑器的方法实例代码

    这篇文章主要介绍了在vue 中使用百度ueEditor编辑器的方法实例代码 ,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • 基于vue+echarts实现柱状图渐变色效果(每个柱子颜色不同)

    基于vue+echarts实现柱状图渐变色效果(每个柱子颜色不同)

    前段时间的vue项目中用到了echarts柱状图,由于UI设计稿中要求使用渐变色,并且每个柱子的颜色不同,于是做了一番研究,现将我的实现方案分享如下
    2024-05-05
  • vue实现鼠标移过出现下拉二级菜单功能

    vue实现鼠标移过出现下拉二级菜单功能

    这篇文章主要介绍了vue实现鼠标移过出现下拉二级菜单功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • vue生成token并保存到本地存储中

    vue生成token并保存到本地存储中

    这篇文章主要介绍了vue生成token并保存到本地存储中,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-07-07
  • Vue监控路由与路由参数, 刷新当前页面数据的方法汇总

    Vue监控路由与路由参数, 刷新当前页面数据的方法汇总

    这篇文章主要介绍了Vue监控路由与路由参数, 刷新当前页面数据的几种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-10-10
  • 详解vue3中组件的非兼容变更

    详解vue3中组件的非兼容变更

    这篇文章主要介绍了详解vue3中组件的非兼容变更,帮助大家更好的理解和学习使用vue框架,感兴趣的朋友可以了解下
    2021-03-03
  • Vue3 如何使用CryptoJS加密

    Vue3 如何使用CryptoJS加密

    CryptoJS是一个强大的JavaScript库,它提供了多种加密解密功能,尤其是AES加密方法,使用CryptoJS,我们可以有效地保护数据安全,防止信息泄露,通过简单的安装和函数编写,本文给大家介绍Vue3 如何使用CryptoJS加密,感兴趣的朋友一起看看吧
    2024-10-10
  • 详解Vue中组件的缓存

    详解Vue中组件的缓存

    这篇文章主要介绍了Vue中组件的缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • vue组件引用另一个组件出现组件不显示的问题及解决

    vue组件引用另一个组件出现组件不显示的问题及解决

    这篇文章主要介绍了vue组件引用另一个组件出现组件不显示的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04

最新评论