关于Vue.nextTick()的正确使用方法浅析


Posted in Javascript onAugust 25, 2017

本文主要给大家介绍了关于Vue.nextTick()的正确使用,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

什么是Vue.nextTick()

官方文档解释如下:

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

我理解的官方文档的这句话的侧重点在最后那半句获取更新后的DOM,获取更新后的DOM言外之意就是什么操作需要用到了更新后的DOM而不能使用之前的DOM或者使用更新前的DOM或出问题,所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会对DOM进行操作的 js代码,比如Swiper扩展包的

var swiper = new Swiper('.swiper-container', {
   pagination: '.swiper-pagination',
   nextButton: '.swiper-button-next',
   prevButton: '.swiper-button-prev',
   paginationClickable: true,
   spaceBetween: 30,
   centeredSlides: true,
   autoplay: 2500,
   autoplayDisableOnInteraction: false
  });

什么时候需要用的Vue.nextTick()

  • 你在Vue生命周期的created()钩子函数进行的DOM操作一定要放在Vue.nextTick()的回调函数中。原因是什么呢,原因是在created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,所以此处一定要将DOM操作的js代码放进Vue.nextTick()的回调函数中。与之对应的就是mounted钩子函数,因为该钩子函数执行时所有的DOM挂载和渲染都已完成,此时在该钩子函数中进行任何DOM操作都不会有问题 。
  • 在数据变化后要执行的某个操作,而这个操作需要使用随数据改变而改变的DOM结构的时候,这个操作都应该放Vue.nextTick()的回调函数中。

原因是,Vue是异步执行dom更新的,一旦观察到数据变化,Vue就会开启一个队列,然后把在同一个事件循环 (event loop) 当中观察到数据变化的 watcher 推送进这个队列。如果这个watcher被触发多次,只会被推送到队列一次。这种缓冲行为可以有效的去掉重复数据造成的不必要的计算和DOm操作。而在下一个事件循环时,Vue会清空队列,并进行必要的DOM更新。

当你设置 vm.someData = 'new value',DOM 并不会马上更新,而是在异步队列被清除,也就是下一个事件循环开始时执行更新时才会进行必要的DOM更新。如果此时你想要根据更新的 DOM 状态去做某些事情,就会出现问题。。为了在数据变化之后等待 Vue 完成更新 DOM ,可以在数据变化之后立即使用 Vue.nextTick(callback) 。这样回调函数在 DOM 更新完成后就会调用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
在JavaScript中遭遇级联表达式陷阱
Mar 08 Javascript
js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
Jan 30 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
Oct 23 Javascript
Jquery给基本控件的取值、赋值示例
May 23 Javascript
深入分析JSONP跨域的原理
Dec 10 Javascript
jquery插件之文字间歇自动向上滚动效果代码
Feb 25 Javascript
微信小程序中用WebStorm使用LESS
Mar 08 Javascript
JavaScript中清空数组的三种方式
Mar 22 Javascript
JavaScript实现重力下落与弹性效果的方法分析
Dec 20 Javascript
微信小程序之onLaunch与onload异步问题详解
Mar 28 Javascript
vue-cli项目使用mock数据的方法(借助express)
Apr 15 Javascript
js设计模式之代理模式及订阅发布模式实例详解
Aug 15 Javascript
jQuery图片缩放插件smartZoom使用实例详解
Aug 25 #jQuery
JS中利用swiper实现3d翻转幻灯片实例代码
Aug 25 #Javascript
在Vue组件化中利用axios处理ajax请求的使用方法
Aug 25 #Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
Aug 25 #Javascript
JavaScript数据类型的存储方法详解
Aug 25 #Javascript
使用JQ完成表格隔行换色的简单实例
Aug 25 #Javascript
Vue.js实现网格列表布局转换方法
Aug 25 #Javascript
You might like
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
PHP二进制与字符串之间的相互转换教程
2016/10/14 PHP
php使用gearman进行任务分发操作实例详解
2020/02/26 PHP
javascript KeyDown、KeyPress和KeyUp事件的区别与联系
2009/12/03 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
easyui-combobox 实现简单的自动补全功能示例
2016/11/08 Javascript
vue学习笔记之vue1.0和vue2.0的区别介绍
2017/05/17 Javascript
微信小程序页面开发注意事项整理
2017/05/18 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
vue组件name的作用小结
2018/05/23 Javascript
Vue.js实现的计算器功能完整示例
2018/07/11 Javascript
elementUI 设置input的只读或禁用的方法
2018/10/30 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
javascript中this的用法实践分析
2019/07/29 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
2019/11/21 Javascript
Python 爬虫学习笔记之多线程爬虫
2016/09/21 Python
Python列表list内建函数用法实例分析【insert、remove、index、pop等】
2017/07/24 Python
python中requests库session对象的妙用详解
2017/10/30 Python
python实现机器学习之多元线性回归
2018/09/06 Python
pyinstaller参数介绍以及总结详解
2019/07/12 Python
python爬虫库scrapy简单使用实例详解
2020/02/10 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
H&M旗下高端女装品牌:& Other Stories
2018/05/07 全球购物
美赞臣营养马来西亚旗舰店:Enfagrow马来西亚
2019/07/26 全球购物
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
会计主管岗位职责
2014/01/03 职场文书
活动总结报告怎么写
2014/07/03 职场文书
丽江古城导游词
2015/02/03 职场文书
清明祭英烈活动总结
2015/05/11 职场文书
同学聚会祝酒词
2015/08/10 职场文书
关爱留守儿童主题班会
2015/08/13 职场文书