首页 > 其他分享 >Vue $nextTick的作用

Vue $nextTick的作用

时间:2022-12-22 23:00:58浏览次数:42  
标签:nextTick el Vue DOM 更新 修改 message 作用

NextTick

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

我们可以理解成,Vue 在更新 DOM 时是异步执行的。当数据发生变化,Vue将开启一个异步更新队列,视图需要等队列中所有数据变化完成之后,再统一进行更新

举例一下

Html结构

<div id="app"> {{ message }} </div>

构建一个vue实例

const vm = new Vue({
  el: '#app',
  data: {
    message: '原始值'
  }
})

修改message

this.message = '修改后的值1'
this.message = '修改后的值2'
this.message = '修改后的值3'

这时候想获取页面最新的DOM节点,却发现获取到的是旧值

console.log(vm.$el.textContent) // 原始值

这是因为message数据在发现变化的时候,vue并不会立刻去更新Dom,而是将修改数据的操作放在了一个异步操作队列中

如果我们一直修改相同数据,异步操作队列还会进行去重

等待同一事件循环中的所有数据变化完成之后,会将队列中的事件拿来进行处理,进行DOM的更新

为什么要有nexttick

举个例子

{{num}}
for(let i=0; i<100000; i++){
    num = i
}

如果没有 nextTick 更新机制,那么 num 每次更新值都会触发视图更新(上面这段代码也就是会更新10万次视图),有了nextTick机制,只需要更新一次,所以nextTick本质是一种优化策略

使用场景

如果想要在修改数据后立刻得到更新后的DOM结构,可以使用Vue.nextTick()

第一个参数为:回调函数(可以获取最近的DOM结构)

第二个参数为:执行函数上下文

// 修改数据
vm.message = '修改后的值'
// DOM 还没有更新
console.log(vm.$el.textContent) // 原始的值
Vue.nextTick(function () {
  // DOM 更新了
  console.log(vm.$el.textContent) // 修改后的值
})

组件内使用 vm.$nextTick() 实例方法只需要通过this.$nextTick(),并且回调函数中的 this 将自动绑定到当前的 Vue 实例上

this.message = '修改后的值'
console.log(this.$el.textContent) // => '原始的值'
this.$nextTick(function () {
    console.log(this.$el.textContent) // => '修改后的值'
})

$nextTick() 会返回一个 Promise 对象,可以是用async/await完成相同作用的事情

this.message = '修改后的值'
console.log(this.$el.textContent) // => '原始的值'
await this.$nextTick()
console.log(this.$el.textContent) // => '修改后的值'

结语

本文到此结束,谢谢大家的观看!

如有问题,欢迎各位指正!

标签:nextTick,el,Vue,DOM,更新,修改,message,作用
From: https://blog.51cto.com/u_15718546/5963292

相关文章

  • Vue中plugins
    插件可用于扩展Vue,自定义插件应包含install方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据。定义插件://plugin.jsexportdefault{......
  • Vue监视属性和计算属性对比
            computed和watch之间的区别             1.computed能完成的功能,watch都可以完成。          ......
  • Vue中mixin混合
    vue中的mixin可以实现组件中重复代码的高度复用,可以将不同组件中重复的组件选项(如,data、created、mounted、components、computed、watch等)都提取出来,形成一个mixin的js文......
  • Vue之监视属性
     监视属性watch           1.当被监视的属性变化时,回调函数自动调用,进行相关操作          2.监视的属性必须存在,才能......
  • 彻底理解Vue组件间通信(6种方式)
    在vue的学习中,vue组件间的通信是不得不了解的,在实际开发中,也是非常常用的,所以这里我总结了Vue组件的通信的6种方式,希望能帮助小伙伴们更好更快的去理解Vue组件间的通信组......
  • Vue 里,多级菜单要如何设计才显得专业?
    老生常谈了!虽然我们是Java猿,但是写起来前端代码也不含糊!今天我想来和大家聊聊这个前端的动态菜单,要如何设计才显得专业!还是以我们的TienChin项目为例,大家一起来看看。......
  • Vue2和Vue3使用vue-print-nb实现打印功
    Vue2和Vue3使用vue-print-nb实现打印功Vue2使用vue-print-nb实现打印功Vue3使用vue3-print-nb实现打印功Vue2Vue2.0版本安装方法:npminstallvue-print-nb--save/......
  • 内存泄漏、块级格式化上下文、语义化标签的作用
    一、内存泄漏?定义:申请到的一块内存既不能被使用,也不能被回收,直到浏览器进程结束。哪些常见的内存泄漏?1.意外的全局变量一个函数体内的变量没有使用var或let关键字......
  • python中单下划线与双下划线命名变量的作用与区别
    在python中有一些与下划线相关的约定,这是一个有趣的主题,值得分析分析。对于变量前面有一个下划线,大家都知道这意味着这个变量是类内私有变量,但是奇怪的是这样的类内变量是......
  • Vue生命周期
    概述Vue生命周期函数主要包含8个部分,按顺序分别是:1.beforeCreate(创建前)2.created(创建后)3.beforeMount(载入前)4.mounted(载入后)5.beforeUpdate(更新前)6.updated......