美文网首页
异步更新队列 - 2018-05-17

异步更新队列 - 2018-05-17

作者: 勇敢的小拽马 | 来源:发表于2018-05-17 20:44 被阅读0次
  • 2018-05-17 创建

可能你还没有注意到,Vue 异步执行 DOM 更新。只要观察到数据变化,Vue 将开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。如果同一个 watcher 被多次触发,只会被推入到队列中一次。这种在缓冲时去除重复数据对于避免不必要的计算和 DOM 操作上非常重要。然后,在下一个的事件循环“tick”中,Vue 刷新队列并执行实际 (已去重的) 工作。Vue 在内部尝试对异步队列使用原生的 Promise.then 和 MessageChannel,如果执行环境不支持,会采用 setTimeout(fn, 0) 代替。

例如,当你设置 vm.someData = 'new value' ,该组件不会立即重新渲染。当刷新队列时,组件会在事件循环队列清空时的下一个“tick”更新。多数情况我们不需要关心这个过程,但是如果你想在 DOM 状态更新后做点什么,这就可能会有些棘手。虽然 Vue.js 通常鼓励开发人员沿着“数据驱动”的方式思考,避免直接接触 DOM,但是有时我们确实要这么做。为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用 Vue.nextTick(callback) 。这样回调函数在 DOM 更新完成后就会调用。例如:

<div id="example">{{message}}</div>
var vm = new Vue({
  el: '#example',
  data: {
    message: '123'
  }
})
vm.message = 'new message' // 更改数据
vm.$el.textContent === 'new message' // false
Vue.nextTick(function () {
  vm.$el.textContent === 'new message' // true
})

在组件内使用 vm.$nextTick() 实例方法特别方便,因为它不需要全局 Vue ,并且回调函数中的 this 将自动绑定到当前的 Vue 实例上:

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) // => '更新完成'
      })
    }
  }
})

相关文章

  • 异步更新队列 - 2018-05-17

    2018-05-17 创建 可能你还没有注意到,Vue 异步执行 DOM 更新。只要观察到数据变化,Vue 将开启...

  • Vue.$nextTick用法

    vue是数据驱动视图更新,但vue数据变化后,视图不会立即更新,而是异步的过程.具体的更新时机参考主队列,异步队列...

  • Vue 异步更新及nextTick原理

    目标 理解 Vue 异步更新机制 理解 nextTick 原理   先来看看官网关于 异步更新队列[https:/...

  • vue异步更新队列

    vue在观察到数据变化时并不是直接更新Dom,而是开启一个队列,并缓冲在同一事件循环中发生的所有数据改变。在缓冲中...

  • GCD基础总结一

    上代码~ 同步串行队列 同步并行队列 异步串行队列 异步并行队列 主队列同步 会卡住 主队列异步

  • 大型 feed 系统如何权衡推拉?

    大致步骤如下, 用户发表 feed 后首先写入消息队列,由队列处理机进行异步更新; 更新时不再 push 到所有粉...

  • 05Vue源码剖析2

    Vue 源码剖析2 异步更新队列 Vue 高效的秘诀是一套批量、异步的更新策略 概念解释 事件循环 Event L...

  • GCD的几种创建方式及基本使用

    同步函数 同步函数+主队列 同步函数+串行队列 同步函数+并发队列 异步函数 异步函数+主队列 异步函数+串行队列...

  • 解析Vue.nextTick

    一、原理 1、vue异步异步更新队列(JS运行机制 、 事件循环)Vue 在观察到数据变化时并不是直接更新 DOM...

  • GCD队列、同步异步

    GCD队列、同步异步 GCD队列、同步异步

网友评论

      本文标题:异步更新队列 - 2018-05-17

      本文链接:https://www.haomeiwen.com/subject/tfmidftx.html