React中的Virtual DOM(看这一篇就够了)

文章目录

  • 前言
  • 了解Virtual DOM
  • react创建虚拟dom的方式
  • React Element
  • 虚拟dom的流程
  • 虚拟dom和真实dom的对比
  • 后言

前言

hello world欢迎来到前端的新世界


😜当前文章系列专栏:react合集
🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。(如果出现错误,感谢大家指出)🌹
💖感谢大家支持!您的观看就是作者创作的动力

了解Virtual DOM

虚拟 DOM(Virtual DOM)是 React 中的一种技术,它是一个轻量级的 JavaScript 对象树,用于描述真实 DOM 的结构和属性。虚拟 DOM 可以作为中间层存在,用于优化页面渲染的性能和效率。

作用

  • 虚拟 DOM 的基本思想是将整个 DOM 结构抽象成一个 JavaScript 对象树,通过对这个对象树的操作来更新实际的 DOM。当组件的状态或属性发生变化时,React 会生成一个新的虚拟 DOM 树,并通过比较新旧虚拟 DOM 树的差异,找出需要更新的部分。然后,React 会将这些差异转化为最小的 DOM 操作,只更新实际 DOM 中需要变化的部分,从而提高页面渲染的性能。
  • 虚拟 DOM 的主要优势在于它可以避免频繁地直接操作实际 DOM。相比于直接修改实际 DOM,虚拟 DOM 的操作更加轻量级,因为它是在内存中进行的。只有当需要更新实际 DOM 时,React 才会将变化应用到实际 DOM 上,从而减少了对实际 DOM 的操作次数,提高了性能。
  • 此外,虚拟 DOM 还可以简化开发流程。开发者可以将关注点集中在组件的逻辑和状态管理上,而不需要过多地关注实际 DOM 的操作。这样可以提高开发效率,并使代码更易于维护和理解。

总结来说,虚拟 DOM 是 React 中的一个重要概念,通过在内存中构建和操作 JavaScript 对象树,它可以优化页面渲染的性能和效率,同时简化开发流程。虚拟 DOM 在 React 中的应用使得前端开发更加高效和便捷。

react创建虚拟dom的方式

第一种:jsx来创建虚拟dom

const VDOM = (
	<div>
		<h1>我是张三</h1>
		<p>今年28岁了</p>
	</div>
)

使用 React.createElement() 方法:

React 提供了一个名为 createElement() 的方法,用于创建虚拟 DOM 元素。这个方法接受三个参数:元素类型、属性对象和子元素。

const element = React.createElement('div', { className: 'my-class' }, 'Hello, React!');

总结

上述代码中,createElement() 方法创建了一个

元素的虚拟 DOM,其中包含了 className 属性和文本内容。

无论使用 JSX 还是 createElement() 方法,最终都会生成一个虚拟 DOM 对象,它是一个普通的 JavaScript 对象,包含了元素类型、属性、子元素等信息。这个虚拟 DOM 对象可以被 React 用于进行组件的渲染和更新操作。

需要注意的是,创建虚拟 DOM 只是在内存中构建了一个 JavaScript 对象,并没有直接操作实际的 DOM。要将虚拟 DOM 渲染到实际的 DOM 上,需要使用 React 的渲染方法,如 ReactDOM.render()。这个方法会将虚拟 DOM 转化为实际的 DOM 并插入到指定的容器中。

React Element

  • Virtual DOM 是真实 DOM 的模拟,真实 DOM 是由真实的 DOM 元素构成,Virtual DOM 也是由虚拟的 DOM 元素构成。
  • 真实 DOM 元素我们已经很熟悉了,它们都是 HTML 元素(HTML Element)。
  • 那虚拟 DOM 元素是什么呢?React 给虚拟 DOM 元素取名叫 React 元素(React Element)。

在这里插入图片描述

虚拟dom的流程

初始化:当创建一个 React 组件时,React 会生成一个虚拟 DOM 树,它是由轻量级的 JavaScript 对象构成的,与实际的 DOM 结构相对应。

渲染虚拟 DOM:通过调用组件的 render 方法,React 将虚拟 DOM 树转换为真实的 DOM 元素。这个过程会根据组件的状态和属性,生成一个新的虚拟 DOM 树。

Diff 算法:在每次更新组件时,React 会使用 Diff 算法比较新旧虚拟 DOM 树的差异,找出需要更新的部分。Diff 算法通过比较节点的类型、属性和顺序等信息,尽可能地减少对实际 DOM 的操作。

更新实际 DOM:根据 Diff 算法的结果,React 会将需要更新的部分转化为最小的 DOM 操作,然后将其应用到实际的 DOM 结构中。这样可以避免全量更新整个页面,提高页面渲染的效率。

监听数据变化:React 使用了单向数据流的模型,当组件的状态或属性发生变化时,React 会重新执行渲染流程,生成新的虚拟 DOM 树,并更新实际的 DOM 结构。

销毁组件:当组件被销毁时,React 会清除对应的虚拟 DOM 树和实际的 DOM 结构,释放相关资源。

虚拟dom和真实dom的对比

  • 性能更好:虚拟DOM可以减少对真实DOM的操作次数,从而提高应用程序的性能。当组件状态发生变化时,React会使用虚拟DOM来计算出最小化的DOM操作,然后只更新需要更新的部分,而不是整个页面。

  • 更容易维护:由于React使用虚拟DOM,我们可以将组件的状态和UI分离开来。这使得代码更加模块化,易于维护和重构。

  • 跨平台:React Native使用虚拟DOM来构建原生应用程序,因此可以在多个平台上使用相同的代码。

  • 更好的开发体验:React使用JSX语法来描述UI,这使得代码更加简洁、易读、易写,并且可以通过组件化的方式来组织代码。

  • 更好的可测试性:由于React组件是纯函数,它们的输出仅取决于输入,因此可以更容易地编写自动化测试。

后言

创作不易,要是本文章对广大读者有那么一点点帮助 不妨三连支持一下,您的鼓励就是博主创作的动力

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DevOps持续集成-Jenkins(3)

文章目录 DevOpsDevOps概述Jenkins实战3&#xff1a;实战1和实战2的加强版&#xff08;新增SonarQube和Harbor&#xff09;⭐环境准备⭐项目架构图对比Jenkins实战1和实战2&#xff0c;新增内容有哪些&#xff1f;SonarQube教程采用Docker安装SonarQube &#xff08;在Jenkins所…

生成树协议:监控 STP 端口和交换机

什么是生成树协议 生成树协议 &#xff08;STP&#xff09; 用于网络交换机&#xff0c;以防止循环和广播风暴。在局域网 &#xff08;LAN&#xff09; 中&#xff0c;两条或多条冗余路径可以连接到同一网段。当交换机或网桥从所有可用端口传输帧时&#xff0c;这些帧开始在网…

基于单片机设计的智能窗帘控制系统

一、前言 智能家居技术在近年来取得了巨大的发展&#xff0c;并逐渐成为人们日常生活中的一部分。智能家居系统带来了便利、舒适和高效的生活体验&#xff0c;拥有广泛的应用领域&#xff0c;其中之一就是智能窗帘控制系统。 传统窗帘需要手动操作&#xff0c;打开或关闭窗帘…

华硕天选1天选2天选3天选4天选air原厂预装出厂系统恢复安装教程方法

华硕天选1天选2天选3天选4天选air原厂预装出厂系统恢复安装教程方法 第一:自备原装swm/esd/wim/iso等格式系统文件&#xff0c;以上这几种格式文件安装恢复非常简单&#xff0c;使用PE工具即可完成恢复安装&#xff0c;还有一种安装方法就是华硕zip工厂恢复模式 1.首先需要自…

Adaptive AUTOSAR RTA-VRTE工具链介绍

ETAS Adaptive AUTOSAR RTA-VRTE是一种面向服务架构的中间件方案,提供了自适应AutoSAR平台,为应用层软件提供了运行环境. RTA-VRTE start kit的构建系统在主机VM内执行,可以创建AUTOSAR自适应应用程序并将其部署到一个或多个目标ECU虚拟机.

【VPX610】 青翼科技基于6U VPX总线架构的高性能实时信号处理平台

板卡概述 VPX610是一款基于6U VPX架构的高性能实时信号处理平台&#xff0c;该平台采用2片TI的KeyStone系列多核DSP TMS320C6678作为主处理单元&#xff0c;采用1片Xilinx的Virtex-7系列FPGA XC7VX690T作为协处理单元&#xff0c;具有2个FMC子卡接口&#xff0c;各个处理节点之…

linux-文件系统

目录 一、文件系统 1.分区 2.文件系统分类 3.文件系统创建工具 4.查看文件系统的属性 5.挂载 6.buffer和cache 一、文件系统 1.分区 1-4个主分区 第五个序号开始&#xff0c;是逻辑分区 2.文件系统分类 vfs文件系统 ------------- virtualenv file System&#xff0…

智慧社区燃气管网监测系统

燃气易燃易爆&#xff0c;一旦操作不当或疏忽大意&#xff0c;极易引发燃气安全事故&#xff0c;造成严重后果&#xff0c;2023年10月24日&#xff0c;在吉林某小区&#xff0c;发生了燃气使用不当产生的爆炸导致了1人死亡&#xff0c;1人重伤&#xff0c;15人轻伤&#xff0c;…

【嵌入式开源库】timeslice的使用,完全解耦的时间片轮询框架构

完全解耦的时间片轮询框架构 简介项目代码timeslice.htimeslice.clist.hlist.c 创建工程移植代码实验函数说明timeslice_task_inittimeslice_task_addtimeslice_tak_deltimeslice_get_task_num 结尾 简介 timeslice是一个时间片轮询框架&#xff0c;他是一个完全解耦的时间片轮…

电脑视频怎么转音频mp3

如果你在电脑上观看视频时喜欢上某个片段的背景音乐&#xff0c;且想将喜欢的背景音乐制作为手机铃声。我是建议你将此视频转换为 MP3 格式&#xff0c;因为 MP3 几乎与所有设备相兼容&#xff0c;让你可以在不同设备上不受限制地去聆听它。那该如何转换呢&#xff1f;无需担心…

LinkedList概念+MyLinkedList的实现

文章目录 LinkedList笔记一、 LinkedList1.概念2.LinkedList的构造方法3.LinkedList的遍历 二、MyLinkedList的实现1.定义内部类2.打印链表、求链表长度、判断是否包含关键字3. 头插法和尾插法4.在任意位置插入5.删除结点6.清空链表 LinkedList笔记 一、 LinkedList 1.概念 L…

将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表

将两个有序顺序表合并为一个新的有序顺序表&#xff0c;并由函数返回结果顺序表 算法思路&#xff1a; 这个其实就是一个归并排序&#xff0c;我们这里两顺序表为升序&#xff0c;要合并成一个升序表 用i和j分别标记顺序表A和顺序表B的元素&#xff0c;然后新表是C 每次从A和…

HarmonyOS 自定义抽奖转盘开发(ArkTS)

介绍 本篇 Codelab 是基于画布组件、显式动画&#xff0c;实现的一个自定义抽奖圆形转盘。包含如下功能&#xff1a; 1. 通过画布组件 Canvas&#xff0c;画出抽奖圆形转盘。 2. 通过显式动画启动抽奖功能。 3. 通过自定义弹窗弹出抽中的奖品。 相关概念 ● Stack组件…

web自动化测试框架介绍

一、目的 web自动化测试作为软件自动化测试领域中绕不过去的一个“香饽饽”&#xff0c;通常都会作为广大测试从业者的首选学习对象&#xff0c;相较于C/S架构的自动化来说&#xff0c;B/S有着其无法忽视的诸多优势&#xff0c;从行业发展趋、研发模式特点、测试工具支持&…

PMP考试是如何提高项目管理能力的?

通过获得PMP认证&#xff0c;项目管理人员可以提高其项目管理能力&#xff0c;并在行业中取得更高的职业发展。PMP如何提高项目管理能力&#xff0c;具体体现在以下几个方面&#xff1a; 1. 标准化方法&#xff1a; PMP认证基于《项目管理知识体系指南》(PMBOK)&#xff0c;该…

如何设计实时聊天系统的架构

1. 系统的要求和目标 1.1 功能要求 对话&#xff1a;系统应支持用户之间的一对一和群组对话。确认消息&#xff1a;系统应支持消息传递确认&#xff0c;如已发送、已送达、已读。共享&#xff1a;系统应支持媒体文件的共享&#xff0c;例如图像、视频和音频。聊天存储&#x…

IT行业哪个方向比较好就业?

IT行业哪个方向比较好就业? IT行业哪个方向比较好就业?引言IT技术发展背景及历程IT行业的就业方向有哪些&#xff1f;1. 软件开发2. 网络安全3. 数据分析4. 人工智能和机器学习5. 云计算6. 物联网&#xff08;IoT&#xff09;7. 软件测试与质量保障8. 区块链 分享在IT行业的就…

mac系统u盘启动盘制作教程,更新至macOS Sonoma 14

mac系统怎么制作装系统的u盘,如果您要在多台电脑上安装 macOS&#xff0c;而又不想每次都下载安装器&#xff0c;这时可引导安装器就会很有用。一起来看苹果电脑u盘启动盘制作教程吧。 Macos系统安装包合集包揽macos 10.15&#xff0c;macos 11和苹果最新系统等多个版本 1、A…

tomcat的负载均衡、动静分离(nginx联动)

动静分离&#xff1a; 访问静态页面和动态页面分开 实现动态和静态页面负载均衡 实验5台虚拟机 一、动态负载均衡 3台虚拟机模拟&#xff1a; 代理服务器&#xff1a;30 tomcat动态页面&#xff1a;21、22 代理服务器&#xff1a; proxy_pass http://tomcat; proxy_set_h…

【JavaEE】网络编程---UDP数据报套接字编程

一、UDP数据报套接字编程 1.1 DatagramSocket API DatagramSocket 是UDP Socket&#xff0c;用于发送和接收UDP数据报。 DatagramSocket 构造方法&#xff1a; DatagramSocket 方法&#xff1a; 1.2 DatagramPacket API DatagramPacket是UDP Socket发送和接收的数据报。…