Vue.nextTick() 实现原理

Vue.nextTick() 实现原理

由于 Vue 的异步更新机制,当我们修改数据后立即获取DOM,获取到的是数据修改之前的DOM,如果想要获取数据更新后的 DOM,就需要使用Vue.nextTick() 方法

实现原理
Vue.nextTick() 方法的实现原理是基于浏览器事件循环,包括宏任务和微任务队列,采用微任务优先的方式。

当我们修改数据时,Vue 会将 DOM 更新操作放到一个异步任务队列中,等待下一次事件循环时执行。而 Vue.nextTick() 方法则是将一个回调函数推入到异步任务队列中,等待 DOM 更新完成后执行。

具体实现方式有以下几种:
① 在 Vue中,如果浏览器支持 Promise,则会优先使用;

② 如果不支持 Promise,则会使用原生的 setTimeout 方法模拟异步操作;

③ 如果浏览器支持 MutationObserver,Vue 会使用 MutationObserver 监听 DOM 更新,并在 DOM 更新完成后执行回调函数。

④ 使用 setlmmediate: 在 lE 中,setlmmediate 方法可以用来延迟异步执行任务。在 Vue2.x 中,如果浏览器支持 setlmmediate,则会优先使用 setlmmediate,否则会使用 setTimeout。

源码中定义了一个异步逻辑函数,采用优雅降级的方式:
先判断浏览器是否支持 Promise,如果支持则优先使用 Promise.then() 方法来触发执行回调函数; 否则,判断是否支持MutationObserver,支持的话就会实例化一个观察者对象,观察文本节点发生变化时,执行回调函数; 如果都不支持,则看下当前是否是IE, 如果是就会采用 setlmmediate 来延迟异步执行任务; 如果再不支持,会利用 setTimeout 设置延时为0。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/811403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】编写并运行Shell脚本程序操作实例

关于Shell脚本的介绍: Shell脚本是一种用于自动化任务和简化常见操作的脚本语言,通常用于Linux和Unix环境中。Shell脚本允许用户通过编写一系列命令和逻辑语句来执行一系列任务,从而提高了工作效率和自动化水平。 以下是关于Shell脚本的详细…

VUE3组合式API

create-vue create-vue是Vue官方新的脚手架工具,底层切换到了vite,为开发提供极速相应 使用create-vue 1.安装16.0或者更高版本的Node.js 2.npm init vuelatest指令会安装并执行create-vue 项目目录和关键文件 组合式API Vue 3引入了组合式API(Com…

【Super数据结构】二叉搜索树与二叉树的非递归遍历(含前/中/后序)

🏠关于此专栏:Super数据结构专栏将使用C/C语言介绍顺序表、链表、栈、队列等数据结构,每篇博文会使用尽可能多的代码片段图片的方式。 🚪归属专栏:Super数据结构 🎯每日努力一点点,技术累计看得…

《Sky光遇》无视steam锁区的两种下载入库游玩教程(图文一览)

玩家在光遇游戏中需要找到每一关的子民,然后穿过艰难险阻,最终在石碑前接受祝福,就是通过这一关了。玩家只有通关后会来到一个祭坛,从这个祭坛周围的门前往下一关或是回到遇境,通关就相当于是解锁地图场景,…

【Django开发】前后端分离美多商城项目第7篇:登录,使用登录的流程【附代码文档】

美多商城项目4.0文档完整教程(附代码资料)主要内容讲述:美多商城,项目准备1.B2B--企业对企业,2.C2C--个人对个人,3.B2C--企业对个人,4.C2B--个人对企业,5.O2O--线上到线下,6.F2C--工厂到个人。项目准备,配置1. 修改set…

C++——StackQueue

目录 一Stack 1介绍 2接口 3模拟实现 4栈的oj题 二Queue 1介绍 2接口 3模拟实现 三容器适配器 1再谈栈和队列 四优先级队列 1接口 ​编辑 2仿函数 五dequeue的简单介绍 一Stack 1介绍 先来看看库中对栈的介绍: 1. stack是一种容器适配器&#x…

Leetcode 150. 逆波兰表达式求值和Leetcode 55. 跳跃游戏

文章目录 Leetcode 150. 逆波兰表达式求值题目描述C语言题解和思路解题思路 Leetcode 55. 跳跃游戏题目描述C语言题解和思路解题思路 Leetcode 150. 逆波兰表达式求值 题目描述 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。 请你计…

开箱即用的 SpringBoot 企业级开发平台

项目概述 基于 Spring 实现的通用权限管理平台(RBAC模式)。整合最新技术高效快速开发,前后端分离模式,开箱即用。 核心模块包括:用户、角色、职位、组织机构、菜单、字典、日志、多应用管理、文件管理、定时任务等功能…

【AcWing】蓝桥杯集训每日一题Day32|贪心|1349.修理牛棚

1349.修理牛棚 1349. 修理牛棚 - AcWing题库难度:中等时/空限制:1s / 64MB总通过数:1275总尝试数:2405来源:usaco training 1.4算法标签贪心 题目内容 在一个下着暴风雨的夜晚,大风掀翻了农夫约翰的牛棚的…

鸿蒙TypeScript学习第13天:【元组】

1、TypeScript 元组 我们知道数组中元素的数据类型都一般是相同的(any[] 类型的数组可以不同),如果存储的元素数据类型不同,则需要使用元组。参考文档:qr23.cn/AKFP8k 元组中允许存储不同类型的元素,元组…

代码随想录算法训练营day36

435_无重叠区间 题目: 给定一个区间的集合 intervals ,其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2],[2,3],[3,4],[1,3]] 输出: 1 解释: 移除 [1,3] 后&…

手把手教你创建新的OpenHarmony 三方库

创建新的三方库 创建 OpenHarmony 三方库,建议使用 Deveco Studio,并添加 ohpm 工具的环境变量到 PATH 环境变量。 创建方法 1:IDE 界面创建 在现有应用工程中,新创建 Module,选择"Static Library"模板&a…

bash脚本中‘-b -u -p’‘$# -eq’‘#!/bin/bash’‘sed -i “s/\r//“ $1’的用法说明

#!/bin/bash#!/bin/bash: 这是 Bash 脚本的开头,指定了要使用的解释器,即 Bash。 if [ $# -eq 0 ]; thenif [ $# -eq 0 ]; then: 检查脚本是否被调用时提供了参数。$# 表示参数的数量,-eq 0 表示等于 0,即无参数。 echo "p…

2024-3-29 群讨论:如何看到一个线程的所有 JFR 事件

以下来自本人拉的一个关于 Java 技术的讨论群。关注公众号:hashcon,私信拉你 如何查看一个线程所有相关的 JFR 事件 一般接口响应慢,通过日志可以知道是哪个线程,但是如何查看这个线程的所有相关的 JFR 事件呢?JMC 有…

五种主流数据库:子查询

SQL 支持查询语句的嵌套,也就是在一个语句中包含其他的查询语句。嵌套子查询可以用于实现灵活复杂的查询语句。 本文比较五种主流数据库实现的子查询功能,包括 MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite。 功能MySQLOracleSQL ServerPostgre…

探索网络爬虫:技术演进与学习之路

网络爬虫及IP代理池 前言爬虫技术的演进最新的爬虫技术爬虫技术学习路线 前言 在信息时代,网络爬虫技术作为获取和处理网络数据的重要手段,已经成为数据科学、机器学习和许多商业应用的基石。从简单的HTML页面抓取到复杂的动态内容采集,爬虫…

【Java】如果把线程同步机制比喻成餐厅经理

要更好理解Java的线程同步机制,可以尝试通过餐厅经营的方式来进行类比。厨师(共享资源)在厨房里忙碌着,而顾客(线程)都在点菜和等待他们的食物。在这个场景中,同步机制就像是餐厅的经理&#xf…

三大能力升级!大模型开启智能客服新篇章

当前智能化已成为各行各业加速转型发展的关键词,客户服务领域也不例外,将大语言模型与文档问答结合,不仅能够有效提升知识构建效率,重塑智能客服模式,还将成为企业营销、运营智能化进程中的重要助推力! 接…

Redis从入门到精通(十四)Redis分布式缓存(二)Redis哨兵集群的搭建和原理分析

文章目录 前言5.3 Redis哨兵5.3.1 哨兵原理5.3.1.1 集群的结构和作用5.3.1.2 集群监控原理5.3.1.3 集群故障恢复原理 5.3.2 搭建哨兵集群5.3.3 RedisTemplate5.3.3.1 搭建测试项目5.3.3.2 场景测试 前言 Redis分布式缓存系列文章: Redis从入门到精通(十三)Redis分…

一个开源嵌入式USB设备协议栈:FelisUSB

概述 Felis USB 是一个嵌入式USB协议栈。它不依赖于软件系统支持,可以轻量级迁移使用。 Felis USB is an USB stack for embedded system. See introduction in English here. 源码链接:season-studio/FelisUSB:null_C - GitCode开源社区 为什么开发Feli…