位置: IT常识 - 正文

简单易懂 关于nextTick()的理解(关于简单的绘画)

编辑:rootadmin
简单易懂 关于nextTick()的理解 前言

推荐整理分享简单易懂 关于nextTick()的理解(关于简单的绘画),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:关于简单的话,关于简单的故事,关于简单的画画图片,关于简单的故事,关于简单的手抄报图片,关于简单的绘画作品,关于简单的,关于简单的,内容如对您有帮助,希望把文章链接给更多的朋友!

学习Vue的过程中,大家肯定都使用过nextTick(),关于nextTick()的使用时机,大家肯定都知道,那么它的工作原理是怎样的呢,本文就简单说一下它的nextTick()的工作原理。

nextTick的使用时机

首先记住:nextTick所指定的回调会在浏览器更新DOM完毕之后再执行。

举个例子:

在我自己做的一个单页面应用中,我有一个需求,当从后端请求回数据后,马上就对页面进行更新。比如,我要点击操作里的删除操作,前端删除数据后就向后端发请求,后端删除数据后返回数据,如果我们想马上显示到页面上,应该怎么做呢?

可能好多人会像我第一次做那样,比如我这个页面是用 v-for 遍历data这个数据显示出来的,可能好多人就会直接把前端返回的数据直接重新赋值给data。但是这样是绝对不行的!这样只会导致数据其实是变了,但是视图是不会变的,因为vue更新dom是异步的,无法通过同步代码赋值后马上去更新页面。所以即使删除成功了页面也不会显示出来。即使显示删除成功,页面也不会更新。

如何更新

我们的需求是,请求回数据后马上更新页面,首先理解几个点。

1、vue更新Dom是异步更新。简单易懂 关于nextTick()的理解(关于简单的绘画)

如图官网的描述,解释一下这段话,直接看可能有些懵,前两句话,关于同步和异步,以及提到的"事件循环",这就要从JS的运行机制说起,戳我前往。第三句话,“如果同一个 watcher 被多次触发,只会被推入到队列中一次”,这是什么意思呢,也在我的文章中可找到,戳我前往。

2、理解执行时机

读完上面两篇文章,大家应该就知道宏任务和微任务了把,而nextTick内部就是调用宏任务和微任务来完成事件调用的机制,让nextTick里的回调在一个事件循环的最后执行。为什么要在最后呢?在最后即意味着在所有异步任务之后,记得上一点吗,“vue更新Dom是异步更新”,而我们又把nextTick里的回调放在了所有异步任务的最后,这样就解释了最开始那句话,nextTick所指定的回调会在浏览器更新DOM完毕之后再执行。

3、回到例子实现需求

我们想要实现需求,本例我们采用热更新,即只更新局部组件。

我直接把我的子组件全放在router-view里的,通过变化v-if来实现组件更新。

看到这里可能有人会问,这不就是先把v-if设为false,再设置为true来实现吗,要不要nextTick都一样,那么这样想就大错特错了。

还记得刚才说的“如果同一个 watcher 被多次触发,只会被推入到队列中一次”,那篇文章已经解释过了,vue会把所有代码都执行了再去渲染页面,所以我们这两条this.$isRouterAlive = false 和 this.$isRouterAlive = true,相当于只执行了最后一条等于true,false都没执行过,所以相当于还是什么都没做,原始是true,现在还是true。

加了个nextTick就不一样了,这段代码就相当于告诉vue,vue你先帮我执行 this.$isRouterAlive = false,先不要管我nextTick里的东西,你去渲染完了最后再来执行我nextTick里的代码。

这样一说大家是不是就比较明白了,this.$isRouterAlive = true 是在页面渲染过后 再执行的,所以我们肉眼看其实已删除货物,页面马上就更新了,其实其中经过了先把router-view里的子组件取消掉,即v-if = false,然后再让 v-if = true,那么v-if大家都知道就是创建,相当于router-view里的内容被重新创建了,所以此时的数据也是最新的。

本文链接地址:https://www.jiuchutong.com/zhishi/300024.html 转载请保留说明!

上一篇:CSS 实现文字渐变色(css字体设置渐变色)

下一篇:前端面试:浅拷贝和深拷贝的区别?(前端常见面试)

  • 红魔6spro支持nfc吗(红魔6有nfc)

  • iphone13屏幕材质(苹果13屏幕材质是什么)

  • 华为p30充电口啥类型(华为p30充电插口)

  • 可以被数据完整性机制防止的攻击方式是(可以被数据完整性机制)

  • 打开网页手机滴滴响(打开网页手机滴滴滴响)

  • 华为nova6隐私空间怎么用(华为nova6隐私空间怎么隐藏)

  • 一个手机号能注册几个lofter(一个手机号能注册几个QQ)

  • 喇叭正负极接反会怎样(喇叭正负极接反对音质有影响吗)

  • 路由器和ip地址一样吗(路由器和ip地址一样能上去网吗)

  • scm-w09是什么型号(scm-w09和scm-al09)

  • 怎么用word打印彩色照片(怎么用word打印出1厘米)

  • 如何更改airdrop头像(如何更改airdrop的名字)

  • 如何将目录二级缩进(如何将目录二级标题缩进)

  • 手机淘宝币怎么用(淘宝币怎么提现)

  • 计算器data是什么键(计算器的date)

  • 华为手机怎么关闭误触模式(华为手机怎么关机)

  • 台式电脑怎么连接网络(台式电脑怎么连接wifi网络)

  • 华为荣耀20处理器是多少(华为荣耀20处理器是什么型号)

  • 苹果无线耳机怎么改名(苹果无线耳机怎么调音量大小)

  • 手机如何查找微博私信(手机如何查找微信删除的聊天记录)

  • ipad可以插电话卡吗(ipad可以插电话卡转换器吗)

  • 乐视视频怎么上传视频(乐视视频怎么在电视上看)

  • oppo手机取消锁屏新闻(oppo手机取消锁屏密码)

  • nova5发布时间(nova5发布时间和价格)

  • 微博狗头表情导入微信(微博狗头表情啥意思)

  • 搜狐视频如何查看自己的消费清单(搜狐视频如何查看小课)

  • iphone7plus怎么设置悬浮 苹果iphone7plus悬浮球设置教(iphone7plus怎么设置5g网络)

  • 织梦DEDECMS会员提示“数据校验不对,程序返回”问题的解决(织梦设置会员访问)

  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设 电脑维修 湖南楚通运网络