关于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 相关文章推荐
表单填写时用回车代替TAB的实现方法
Oct 09 Javascript
javascript add event remove event
Apr 07 Javascript
javascript动画之圆形运动,环绕鼠标运动作小球
Jul 20 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
Oct 24 Javascript
jQuery回车实现登录简单实现
Aug 20 Javascript
node.js中的fs.lchown方法使用说明
Dec 16 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
May 11 Javascript
基于Jquery和CSS3制作数字时钟附源码下载(CSS3篇)
Nov 24 Javascript
vue滚动轴插件better-scroll使用详解
Oct 17 Javascript
微信小程序入口场景的问题集合与相关解决方法
Jun 26 Javascript
浅谈Vue 函数式组件的使用技巧
Jun 16 Javascript
js数组中去除重复值的几种方法
Aug 03 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数组函数序列之array_splice() - 在数组任意位置插入元素
2011/11/07 PHP
解析php根据ip查询所在地区(非常有用,赶集网就用到)
2013/07/01 PHP
PHP中使用TCPDF生成PDF文档实例
2014/07/01 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
详解php框架Yaf路由重写
2017/06/20 PHP
使用php自动备份数据库表的实现方法
2017/07/28 PHP
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
JS跨域总结
2012/08/30 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
js中动态创建json,动态为json添加属性、属性值的实例
2016/12/02 Javascript
js获取元素下的第一级子元素的方法(推荐)
2017/03/05 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
2017/08/29 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
对angular4子路由&辅助路由详解
2018/10/09 Javascript
Vue项目环境搭建详细总结
2019/09/26 Javascript
详解小程序云开发攻略(解决最棘手的问题)
2019/09/30 Javascript
解决Antd Table表头加Icon和气泡提示的坑
2020/11/17 Javascript
[42:52]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python获得linux下所有挂载点(mount points)的方法
2015/04/29 Python
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
python日志记录模块实例及改进
2017/02/12 Python
深入理解python中的atexit模块
2017/03/07 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
Python使用MyQR制作专属动态彩色二维码功能
2019/06/04 Python
Python异常模块traceback用法实例分析
2019/10/22 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
如何设置PyCharm中的Python代码模版(推荐)
2020/11/20 Python
客服部工作职责范本
2014/02/14 职场文书
金融专业毕业生自荐信
2014/06/26 职场文书
标准版离职证明书
2014/09/12 职场文书
地道战观后感400字
2015/06/04 职场文书
2015年科普工作总结
2015/07/23 职场文书
2016年妇联“6﹒26国际禁毒日”宣传活动总结
2016/04/05 职场文书