当前位置:首页 > 科技  > 软件

NextTick 在 Vue 中如何发挥作用的?其实大部分人一知半解

来源: 责编: 时间:2024-02-05 09:31:40 271观看
导读大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心~背景我发现很多人背八股文真的背傻了,只知道 nextTick = 微任务,其他啥都不知道,也不去了解原因,甚至大部分理解的都是错的?先来

大家好,我是林三心,用最通俗易懂的话讲最难的知识点是我的座右铭,基础是进阶的前提是我的初心~0Am28资讯网——每日最新资讯28at.com

背景

我发现很多人背八股文真的背傻了,只知道 nextTick = 微任务,其他啥都不知道,也不去了解原因,甚至大部分理解的都是错的?0Am28资讯网——每日最新资讯28at.com

先来回顾下nextTick的使用,因为 Vue 的响应式变量是异步更新DOM的,所以当你变量修改的时候,并不能第一时间拿到最新的 DOM,而在nextTick中就可以拿到最新的 DOM0Am28资讯网——每日最新资讯28at.com

图片图片0Am28资讯网——每日最新资讯28at.com

先问是不是,再问为什么

很多人认为 nextTick = 微任务,这其实是错的,正确应该是 nextTick 优先是 微任务,不信可以直接看 Vue 的源码0Am28资讯网——每日最新资讯28at.com

在src/core/util/next-tick.ts 文件中,可以看到 nextTick 优先级如下:0Am28资讯网——每日最新资讯28at.com

  • Promise.resolve().then:微任务
  • MutationObserver:宏任务
  • setImmediate:宏任务
  • setTimeout:宏任务

图片图片0Am28资讯网——每日最新资讯28at.com

所以说 nextTick 只是优先选择微任务而已,当浏览器不支持微任务的时候,它还是会选择宏任务0Am28资讯网——每日最新资讯28at.com

为啥优先微任务?

2023年面试了怎么也得有100个人了,大部分都不能比较好的回答这个问题:nextTick为啥优先选择微任务?0Am28资讯网——每日最新资讯28at.com

首先声明一个点:Vue 的异步更新DOM 其实也是微任务,比如下面的例子,你一次性更新了三次变量,其实会生成三个更新DOM微任务到队列中0Am28资讯网——每日最新资讯28at.com

图片图片0Am28资讯网——每日最新资讯28at.com

你这个时候放一个 nextTick 在后面,那就是在三个微任务后面再放一个微任务而已0Am28资讯网——每日最新资讯28at.com

图片图片0Am28资讯网——每日最新资讯28at.com

我们都知道微任务是在UI渲染之前执行的,那为什么 nextTick 能拿到最新的 DOM 呢?0Am28资讯网——每日最新资讯28at.com

图片图片0Am28资讯网——每日最新资讯28at.com

更新 ≠ 渲染

其实我们要明白一个点:更新 ≠ 渲染,前面三个更新微任务只是更新DOM,修改的是DOM树,而使用 document.getElementById这类方法去获取到的就是DOM树的内容0Am28资讯网——每日最新资讯28at.com

图片图片0Am28资讯网——每日最新资讯28at.com

所以 nextTick 为什么是微任务,但是能获取到最新DOM呢?因为到了 nextTick 这一步的时候,DOM树已经更新完了,只是还没渲染到页面上而已,而我们能通过DOM的一些API去获取到最新的DOM树内容,比如 document.getElementById 这类方法0Am28资讯网——每日最新资讯28at.com

所以,与其说 nextTick 能获取到最新的DOM,还不如说 nextTick 能获取到最新的DOM树信息0Am28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-73790-0.htmlNextTick 在 Vue 中如何发挥作用的?其实大部分人一知半解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 图文讲透Golang标准库 net/http实现原理 - 客户端

下一篇: 轻松实现 SpringBoot 中的隐私数据脱敏处理

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 多线程开发带来的问题与解决方法

    使用多线程主要会带来以下几个问题:(一)线程安全问题  线程安全问题指的是在某一线程从开始访问到结束访问某一数据期间,该数据被其他的线程所修改,那么对于当前线程而言,该线程
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 小米MIX Fold 3下月亮相:今年唯一无短板的全能折叠屏

    这段时间以来,包括三星、一加、荣耀等等有不少品牌旗下的最新折叠屏旗舰都有新的进展,其中荣耀、三星都已陆续发布了最新的折叠屏旗舰,尤其号荣耀Magi
  • 造车两年股价跌六成,小米的估值逻辑变了吗?

    如果从小米官宣造车后的首个交易日起持有小米集团的股票,那么截至2023年上半年最后一个交易日,投资者将浮亏59.16%,同区间的恒生科技指数跌幅为52.78%
  • OPPO、vivo、小米等国内厂商Q2在印度智能手机市场份额依旧高达55%

    7月20日消息,据外媒报道,研究机构的报告显示,在全球智能手机出货量同比仍在下滑的大背景下,印度这一有潜力的市场也未能幸免,出货量同比也有下滑,多家厂
Top