2019-02-28 vue nextTick()

原文章地址: //www.greatytc.com/p/a7550c0e164f
作者:Ruheng
来源:简书

1 为什么用vue nextTick()???

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

所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操作的 js代码

2 一般应用在哪些地方???

2-1 Vue生命周期的created()钩子函数进行的DOM操作

原因:DOM操作是异步的,在created()钩子函数中,数据的改变还不会使DOM更新,因为在mounted之前的钩子函数,还没真正挂载到DOM上,此时操作DOM就得vue nextTick(()=>{ //操作DOM代码 });mounted钩子函数中,el挂载,但DOM并未完全渲染或正在渲染,如需在渲染完之后操作DOM,就放在nextTick()回调函数中去执行DOM操作

2-2 在数据变化后要执行的某个操作,而这个操作需要使用随数据改变而改变的DOM结构

原因: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 更新完成后就会调用。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一:什么是闭包?闭包的用处? (1)闭包就是能够读取其他函数内部变量的函数。在本质上,闭包就 是将函数内部和函数外...
    xuguibin阅读 13,285评论 1 52
  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 10,468评论 0 29
  • 找了一个实习,去公司做数据的可视化,就是用iview-admin,Echarts做一下展示。中间遇到了一个问题数据...
    小白小白啦阅读 12,767评论 1 8
  • Vue中的nextTick涉及到Vue中DOM的异步更新,感觉很有意思,特意了解了一下。其中关于nextTick的...
    Ruheng阅读 686,063评论 57 522
  • 每个 Vue 应用都是通过用 Vue 函数创建一个新的 Vue 实例开始的: 实例生命周期钩子 每个 Vue 实例...
    Timmy小石匠阅读 5,186评论 0 11