React18 04 JSX底层渲染机制--创建虚拟DOM与真实DOM

news/2025/3/6 15:39:01/文章来源:https://www.cnblogs.com/jocelyn11/p/18753133

关于JSX底层处理机制
1)首先,编写的JSX语法,编译为虚拟DOM对象(virtualDOM)
虚拟DOM对象:框架内部构建的一套对象体系(对象的相关成员都是React内部规定的),基于这些属性描述出所构建视图中的DOM节点的相关特征。
a. 基于babel-preset-react-app,把JSX编译为React.createElement(...)的格式(可以去babel官网测测)
React.createElement(ele,props,...children)
*ele:元素标签名或组件
*props:元素的属性集合对象,未设置则为null
*children:当前元素的子节点
b. 再把createElement方法执行,创建出虚拟dom虚拟DOM对象【JSX元素/JSX对象/ReactChild对象】
virtualDOM={ $$typeof:Symbol(react.element), ref:null, key:null, type:标签名或组件 props:{ children:多个为[]/一个的时候直接显示值 }, }


2)然后,把构建的virtualDOM渲染为真实DOM
真实DOM:浏览器中所渲染出来的DOM元素。
通过render方法将构建的virtualDOM插入到root根元素中渲染为真是DOM。




注: 第一次渲染页面是直接从virtualDOM到真实DOM(第一次渲染完成后,会把创建的虚拟DOM缓存起来);但后续视图更新的时候,会按照数据的变化,而重新将JSX编译为新的虚拟DOM(全部重新编译),然后通过DOM-Diff算法对比新旧虚拟DOM,计算出补丁包(Patch),把patch补丁包进行渲染更新~
补丁包(patch):两次视图差异的部分。

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

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

相关文章

欢迎加入ARM64技术手册知识库

本文来自博客园,作者:dolinux,未经同意,禁止转载

基因测序芯片(Flowcell)加工工艺 -赛陆医疗

一、公司简介: 赛陆医疗是一家测序和空间组学平台开发商,公司专注于开发自主知识产权的上游测序平台,并基于其上构建了全球领先的超分辨空间组学平台,实现基因组学和空间组学产品的自主开发及科研临床端转化。公司创立于2020年,由美国知名大学教授和三位深圳市孔雀人才联合…

PTA L1-044 稳赢

PTA L1-044 稳赢 题目描述 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现要求你编写一个稳赢不输的程序,根据对方的出招,给出对应的赢招。但是!为了不让对方输得太惨,你需要每隔K次就让一个平局。 输入格式 输入首先在第一行给出正整数K(≤…

【详细教程】智慧职教MOOC如何下载已结束课程中的视频课件PPT文档资料?

前言:智慧职教MOOC中的有些课程非常好,但是经常会遇到课程已关闭,无法打开查看。这次教大家如何用学无止下载器,把已结束无法打开的课程中的视频课件资料,下载到本地离线观看学习~ 一、电脑浏览器打开智慧职教MOOC网页版 智慧职教MOOC官网:【https://mooc.icve.com.cn/c…

[CSS 3] Tailwindcss 响应式设计

## 响应式断点 *Tailwind CSS* 默认提供了一组预设的断点,即屏幕尺寸范围,用于管理响应式样式。默认的断点包括: - *sm*: *640px* 及以上- *md*: *768px* 及以上- *lg*: *1024px* 及以上- *xl*: *1280px* 及以上- *2xl*: *1536px* 及以上 例如: ```html<img class="…

AI赋能软件测试:从自动化到智能化

一、为什么测试工程师需要关注AI? 传统测试的困境:重复劳动陷阱:手工编写测试用例、反复验证边界条件、兼容性测试的“设备海洋”消耗大量人力。“后知后觉”的反馈:性能瓶颈常在用户量激增后才暴露,修复成本高昂。“看不见的盲区”:复杂业务场景下,人类难以穷举所有异常…

No.35 Element对象属性、Element获取元素位置

、 一、元素对象属性Element对象对应网页的 HTML 元素。每一个 HTML 元素,在 DOM 树上都会转化成一个Element节点对象(以下简称元素节点)。1.1 .idElement.id 属性返回指定元素的id 属性,该属性可读写.1.2 .classNameclassName 属性用来读写当前元素节点的 class 属性。 它的…

绑定元素“seriesName”隐式具有“any”类型

const book = {...actions: {mergeBook({ state, commit }, data: any) {return axios.patch(`/books/merge`, data).then((res: any) => {return res;});}}, };在typescript的编译过程中,函数的参数被提示 {变量名} implicitly has an ‘any’ type,但是笔者也不知道应该…

跨应用启动UIAbility

跨应用启动UIAbility 上篇介绍了应用内启动UIAbility,这篇介绍下应用间的启动方式 应用间UIAbility跳转使用openLink()与startAbility()两个接口均可以实现,应用间跳转主要基于应用链接进行实现(应用内界面跳转页可以通过URI的方式打开),应用链接格式scheme://host[:port]/p…

virtualbox下载安装配置

virtualbox下载安装配置 下载 https://www.virtualbox.org/ 官网 https://www.virtualbox.org/wiki/Downloads 官网下载页 https://www.filehorse.com/download-virtualbox/old-versions/ 历史版本推荐使用第三个网址即可,我这里是安装的6.1.26版本 安装 右键安…