位置: 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字体设置渐变色)

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

  • 工会经费税前扣除比例是多少
  • 工资计提金额有误怎么调整
  • 加工费怎么做账
  • 销售部门快递费用怎么算
  • 企业购买的财产险可以在企业所得税前扣除
  • 零星物流运费无法支付
  • 纳税人财务会计报表报送管理办法
  • 金税盘开具电子发票后如何保存电子版
  • 小规模纳税人计税方法
  • 专票只有抵扣联发票联丢失怎么办
  • 原材料加工成品怎么做账
  • 银行结汇汇兑损益的会计分录怎么写?
  • 外经证预缴税款怎么计算
  • 短期借款的会计科目
  • 母公司占股子公司多少
  • 关于开票时纳税的规定
  • 金税盘新领的发票怎么分发出去
  • 滞纳金入什么会计科目
  • 一般纳税人企业所得税政策最新2023
  • 小规模纳税人附加税减半征收政策2023
  • 收到应收票据应该确认收入吗
  • 行业协会会费收缴标准
  • 网卡和网线都正确接法
  • windows10显示文件格式
  • Mac SIP系统完整性保护开启及关闭的方法介绍
  • php 字符串函数
  • 自创商誉是否能入账
  • jusched.exe是什么进程
  • 收到违约金如何入账
  • 提高支票处理效率的有效方法是
  • php验证码识别
  • 电子汇票追索是什么意思
  • php匿名函数和回调函数
  • 个体户查账征收2023新政策是什么
  • 【GoF 23】23种设计模式与OOP七大原则概述
  • php中global
  • atx系统的grpck命令可验证组的合法性
  • 扣税免除项
  • 私对公可以转账吗?会对做账不利吗
  • python监控模块
  • 总结帝国cms内容是什么
  • 差旅费报销范文
  • 四种股利分配政策及适用情况
  • 房地产企业土地增值税清算
  • 企业所得税季度平均值怎么算
  • 贷方是收入还是借方是收入
  • 全年一次性奖金并入或单独哪个好
  • 公司亏损注销了怎么赔偿
  • 被财政收回的财物有哪些
  • 结转增值税的账务处理
  • 月末应交增值税借方余额期末该怎么处理
  • 员工给兄弟公司的感谢信
  • 汇算清缴可以调整主营业务成本吗
  • 个人付款开了公章怎么办
  • 会计的主要目标是提供什么和什么
  • dos命令win10
  • mac系统怎么样
  • linux图片编辑软件
  • 系统有乱码怎么解决
  • 用u盘怎么装系统win10
  • 组策略怎么用
  • xp无法正常启动怎么办
  • debian7安装教程
  • .exe是什么意思
  • 电脑windows8怎么样
  • grep命令用法
  • perl use of uninitialized
  • JavaScript的strict模式与with关键字介绍
  • java4Android(15)处理流的使用示例、装饰者设计模式、节点流和处理流的关系
  • vue中父子组件如何通信的
  • 批处理模式的例子
  • python编程中的函数
  • AnalogClock
  • dom使用
  • jQuery EasyUI API 中文帮助文档和扩展实例
  • 网上申报增值税纳税申报表怎么填写
  • 北京摇号摇中了能过户吗
  • 福建平潭综合实验区属于哪个市
  • 什么是契税发票?
  • 专用发票收款人可以盖私章吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设