React 渲染流程分析

React 页面是由组件组成的,从根组件直到叶组件,内部的组件数通过 Fiber 来保存并触发并发更新。页面的展示分为两部分,首先是初始化,所有组件首次展示,都要进行渲染,之后是更新流程,也就是页面产生了交互,需要某些组件出现状态变更,React 内部找到需要更新的组件并进行更新。本文从源代码的角度,对 React 的初始化以及更新过程进行梳理:

JSX编译

JSX 是一种 HTML 代码模板,JavaScript 引擎原生并不支持 JSX 语法,因此,运行时需要首先将 JSX 转为浏览器可以执行的 JS 代码。React 通过 Babel 插件 plugin-transform-react-jsx 将 JSX 装换为 JS,下图中 Bundle.js 中包含最终转换好的 JS。
在这里插入图片描述

createRoot

首先,绑定 Root 容器到 Dom 节点,所有 Root 下的组件全部展示在 Dom 节点下。createRoot -> createContainer -> createFiberRoot,最终返回的是 FiberRoot
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

render

firerNode 创建完成之后,调用 root.render,是整个App 渲染的入口。
在这里插入图片描述
updateContainer 中有 Lane 的概念,Lane 和优先级有关系,以后具体再看起什么作用
在这里插入图片描述
进入 scheduleFiber,调度 Fiber 任务
在这里插入图片描述
进入 performConcurrentWorkOnRoot,并发执行任务
在这里插入图片描述
进入 renderRootSync,同步渲染 Root
在这里插入图片描述
进入 workLoopSync,循环处理任务
在这里插入图片描述
进入 performUnitOfWork, 开始处理任务
在这里插入图片描述

进入 beginWork,渲染开始
在这里插入图片描述
开始创建 FiberNode
在这里插入图片描述
进入reconcileChildren,进行对比
在这里插入图片描述
进入处理单个节点逻辑
在这里插入图片描述
进入创建 Fiber 方法
在这里插入图片描述
通过上面的步骤,FiberTree创建完成。下面进入 Commit 阶段,回到performConcurrentWorkOnRoot,进入 finishConcurrentRender:
在这里插入图片描述
最终进入 commitMutationEffects,找到需要修改的节点
在这里插入图片描述
进入commitMutationEffectsOnFiber
在这里插入图片描述
递归处理所有子节点
在这里插入图片描述
处理最终渲染
在这里插入图片描述
Dom 节点操作
在这里插入图片描述

总结

React 渲染流程代码比较多,入口在 Root.render,并发执行 Render,同步执行 Commit。

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

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

相关文章

团队知识管理首选:12款优秀开源Wiki系统推荐

文章介绍了12款好用的开源Wiki:PingCode、DokuWiki、MediaWiki、Tiki Wiki CMS Groupware、XWiki、BookStack、PMWiki、Foswiki、GitBook、Wiki.js、TiddlyWiki、Slite。以及对比了一款非开源但提供免费版本的Wiki工具,以供大家选择。 在企业知识管理和团…

Vue3+vite部署nginx的二级目录,使用hash模式

修改router访问路径 import { createRouter, createWebHashHistory } from vue-routerconst router createRouter({history: createWebHashHistory (/mall4pc-bbc/),routes: [XXX,] })配置package.json文件 "build:testTwo": "vite build --mode testing --ba…

python dropna怎么用

pandas的设计目标之一就是使得处理缺失数据的任务更加轻松些。pandas使用NaN作为缺失数据的标记。 使用dropna使得滤除缺失数据更加得心应手。 dropna常用参数: # DataFrame.dropna(axis0, howany, threshNone, subsetNone, inplaceFalse) 主要的2个参数&#xff…

运筹学基础与应用(简洁版总复习)

第一章 线性规划及单纯形法 图解法 单纯形法 大m法 看案例(综合题) 化标准形式 目标函数的转换 min z变为max z 变量的变换 变量取值无约束 约束方程的转换 ≤:加一个松弛变量 ≥:减一个剩余变量 变量符号≤0的变换 保持变量≥…

618家用智能投影仪推荐:这个高性价比品牌不容错过

随着科技的不断进步,家庭影院的概念已经从传统的大屏幕电视逐渐转向了更为灵活和便携的家用智能投影仪。随着618电商大促的到来,想要购买投影仪的用户们也开始摩拳擦掌了。本文将从投影仪的基础知识入手,为您推荐几款性价比很高的投影仪&…

绘唐一键追爆款2.5免费版

一键追爆款是指通过某种技术手段,可以快速找到当下市场上热销的商品,并进行追踪和购买的方法。这样做可以帮助商家快速抓住市场热点,提高销售业绩。 实现一键追爆款的方法有很多,例如利用大数据分析技术,通过对市场数据…

零售行业会员管理有哪些业务场景?解析不同业务场景的分析指标

在当今竞争激烈的零售市场中,会员管理不再仅仅是收集和存储数据,而是要求企业能够从数据中获取洞察,并据此制定策略。会员板块的业务场景涵盖了多个方面,每一个场景都为企业提供了一个独特的视角,帮助企业了解和服务于…

MSPM0L1306时钟树

图显示了MSPM0Lxx系列设备的顶级时钟树。此图显示映射 振荡器(源)和时钟(目的地)之间,以及的SYSCTL寄存器位字段 选择多路复用器。请注意,并非所有设备都具有图所示的所有时钟系统功能。

【开源】课程智能组卷系统 SSM+JSP+MySQL

目录 一、项目介绍 学生模块 老师模块 试卷模块 试题模块 考试模块 二、项目界面 三、核心代码 一、项目介绍 经典老框架SSM打造入门项目《课程智能组卷系统》,可以给管理员们、学生、教师使用,包括学生模块、老师模块、试卷模块、试题模块、考试模块、公告…

查分易分班查询系统怎么做?

分班查询一直是让许多老师头疼的问题。一到开学季,办公桌上就堆满了学生的资料和分班表。要将这些信息一一录入系统,然后发布给学生和家长极其浪费时间和精力,而且很容易出错。每当分班结果公布时,家长和学生急切地想要知道自己的…

SAS:PROC SQL和ANSI标准

文章来源于SAS HELP PROC SQL 和ANSI SQL 的区别——图表和视图名称的作用域规则不同 例1:匹配数据集相关名称 当PROC SQL匹配数据集相关名称时,会依次进行3个步骤:1、有别名,用别名匹配;2、1匹配失败,在无…

tmux-以脚本中的tmux命令为例解释常用tmux命令

SESSIONenv_monitor_hr_parking ----- 将会话名称env_monitor_hr_parking赋值给变量SESSION tmux new-session -s $SESSION -n runner -d ----- new-session 用于创建新的会话。-s $SESSION 是一个选项,其中 $SESSION 是你想要给你的新会话命名的名称。-n runner 是…

基于YOLOv8的行人检测项目的实现

YOLOv8简介 YOLOv8是YOLO系列的最新版本,在继承YOLOv7的基础上进行了进一步改进。YOLOv8在网络结构、损失函数和训练策略上都有显著的提升,使其在目标检测任务中表现更加出色。各位只需要记住,做目标检测,无脑选V8就完了。YOLOv8…

Visual Studio和BOM历史渊源

今天看文档无意间碰到了微软对编码格式解释,如下链接: Understanding file encoding in VS Code and PowerShell - PowerShell | Microsoft LearnConfigure file encoding in VS Code and PowerShellhttps://learn.microsoft.com/en-us/powershell/scrip…

Golang——RPC

一. RPC简介 远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议。该协议运行于一台计算机的程序调用另外一台计算机的子程序,而程序员无需额外的为这个交互作用编程。如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远…

Sublime Text 4 - 前端代码编辑的卓越之选

Sublime Text 4 是一款备受赞誉的前端代码编辑神器,无论是在 Mac 系统还是 Windows 系统上,都展现出了其独特的魅力和强大的功能。 Sublime Text 4 拥有简洁而直观的用户界面,让开发者能够快速上手并沉浸于代码编写的过程中。它提供了高度可…

二叉树构建

由于二叉树的左右子树和整树相似(即子问题和原始问题相似),因此多考虑使用递归的方法解决问题。 leetcode 108.将有序列表转换为二叉树 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡…

Python数据分析个人笔记6

目录 Function application读取数据查看数据信息自定义函数拆分square自定义函数拆分years自定义函数拆分floor自定义函数拆分followInfo1、获取followInfo列2、对followInfo列进行拆分3、提取关注人数4、提取带看次数5、添加到house的最后两列 缺失值处理house.infohouse.drop…

夹层辊能否解决智能测径仪量程不足的问题?

关键字:智能测径仪,测径仪夹层辊,测径仪量程,夹层辊作用,测径仪量程不足, 智能测径仪是一种高精度的测量设备,主要用于检测线材、管材等圆柱形物体的直径尺寸。在测径仪中,夹层辊是测径仪的关键部件之一,它负责引导和支撑被测物体&#xff0c…

三星堆青铜奇迹:揭秘三千年前的先进制造技术

在四川广汉的三星堆遗址中,考古学家们发现了一件令人叹为观止的青铜龟背形网格状器。这件青铜器的制造技术,在当时的技术条件下显得尤为先进,引发了人们对三星堆文明高度发达科技水平的猜测。 青铜是由铜和锡按一定比例混合而成,这…