关于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 相关文章推荐
json 定义
Jun 10 Javascript
js实现温度计时间样式代码分享
Aug 21 Javascript
Bootstrap中表单控件状态(验证状态)
Aug 04 Javascript
JS控制TreeView的结点选择
Nov 11 Javascript
基于MVC方式实现三级联动(JavaScript)
Jan 23 Javascript
使用Node.js实现RESTful API的示例
Aug 01 Javascript
Angularjs 1.3 中的$parse实例代码
Sep 14 Javascript
Vue数据监听方法watch的使用
Mar 28 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
Aug 20 Javascript
vue3.0中的双向数据绑定方法及优缺点
Aug 01 Javascript
ES2020 新特性(种草)
Jan 12 Javascript
vue使用video插件vue-video-player详解
Oct 23 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
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
PHP登录验证码的实现与使用方法
2016/07/07 PHP
PHP经典算法集锦【经典收藏】
2016/09/14 PHP
JavaScript窗口功能指南之在窗口中书写内容
2006/07/21 Javascript
Jquery Ajax学习实例4 向WebService发出请求,返回实体对象的异步调用
2010/03/16 Javascript
javascript动态的改变IFrame的高度实现自动伸展
2013/10/12 Javascript
php析构函数的具体用法小结
2014/03/11 Javascript
如何调试异步加载页面里包含的js文件
2014/10/30 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
2016/11/07 Javascript
利用原生JS与jQuery实现数字线性变化的动画
2017/02/24 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
python下函数参数的传递(参数带星号的说明)
2010/09/19 Python
python实现逻辑回归的方法示例
2017/05/02 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
对django2.0 关联表的必填on_delete参数的含义解析
2019/08/09 Python
Python函数中的可变长参数详解
2019/09/12 Python
python操作yaml说明
2020/04/08 Python
python如何删除文件、目录
2020/06/23 Python
简单了解Python字典copy与赋值的区别
2020/09/16 Python
python 实现有道翻译功能
2021/02/26 Python
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
英国最全面的橄榄球联盟门票网站:Live Rugby Tickets
2018/10/06 全球购物
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
留学顾问岗位职责
2014/04/14 职场文书
俞敏洪励志演讲稿
2014/04/29 职场文书
运动会广播稿诗歌版
2014/09/12 职场文书
个人租房协议书样本
2014/10/01 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
2015年党建工作总结
2015/03/30 职场文书
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
一篇文章搞懂python混乱的切换操作与优雅的推导式
2021/08/23 Python