React 渲染流程分析

news2024/11/25 23:22:32

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。

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

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

相关文章

简单的心电图信号分割方法

代码很简单,很容易看懂。 import pandas as pdimport matplotlib.pyplot as plt #headers [Name, Age, Marks]df pd.read_csv(samples-folder/samples2.csv) dfdf.drop(0)dfdf.drop(1)# print(df) if(len(df.columns) 3): df.columns [sample interval, sig…

Setapp:只需一次订阅,即可获得 240 款+ Mac 软件

为一项任务寻找合适的应用程序是一项相当艰巨的任务。过去,最好的办法要么是花费宝贵的时间搜索可靠的评论,要么就是相信无论安装什么软件都能完成任务。 如果你是 Mac 用户,那么 Setapp 将让这一问题成为过去。无需在需要时下载单个程序&am…

【数据挖掘】机器学习中相似性度量方法-余弦相似度

写在前面: 首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。 路虽远,行则将至&#…

MIPI A-PHY协议学习

一、说明 A-PHY是一种高带宽串行传输技术,主要为了减少传输线并实现长距离传输的目的,比较适用于汽车。同时,A-PHY兼容摄像头的CSI协议和显示的DSI协议。其主要特征: 长距离传输,高达15m和4个线内连接器; 高速率,支持2Gbps~16Gbps; 支持多种车载线缆(同轴线、屏蔽差分…

SolarLab - hackthebox

简介 靶机名称:SolarLab 难度:中等 靶场地址:https://app.hackthebox.com/machines/SolarLab 本地环境 靶机IP :10.10.11.16 ubuntu渗透机IP(ubuntu 22.04):10.10.16.17 windows渗透机IP(windows11&…

OS复习笔记ch9-1

单处理器调度 调度类型 主要类型 长程调度:决定将哪个进程放入进程池中 中程调度:决定将哪些进程部分或者全部放入内存中 短程调度:决定哪个空闲进程上处理机 I/O调度:决定哪个进程的I/O请求被可用的I/O设备处理 处理器调度和进…

如何通过数据库与AI实现以图搜图?OceanBase向量功能详解

OceanBase支持向量数据库的基础能力 当前,数据库存储系统与人工智能技术的结合,可以体现在两个主要的应用方向上。 一、近似搜索。它利用大语言模型(LLM,简称大模型)的嵌入(embedding)技术&am…

【Android面试八股文】请描述new一个对象的流程

文章目录 请描述new一个对象的流程JVM创建对象的过程检查加载分配内存内存空间初始化设置对象初始化请描述new一个对象的流程 JVM创建对象的过程 当JVM遇到一条new指令时,它需要完成以下几个步骤: 类加载与检查内存分配 并发安全性内存空间初始化设置对象信息对象初始化下图…

永磁同步直线电机(PMLSM)控制与仿真3-永磁同步直线电机数学三环控制整定

文章目录 1、电流环参数整定2、速度环参数整定3、位置环参数整定 写在前面:原本为一篇文章写完了永磁同步直线电机数学模型介绍,永磁同步直线电机数学模型搭建,以及永磁同步直线电机三环参数整定及三环仿真模型搭建,但因为篇幅较长…

贪心+dp,CF 1282B2 - K for the Price of One (Hard Version)

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 1282B2 - K for the Price of One (Hard Version)https://codeforces.com/problemset/problem/1282/B2 二、解题报告 1、思路分析 考虑优先买价格低的,所以先升序排序 定义状态f[i]为购买前i个…

axios打通fastapi和vue,实现前后端分类项目开发

axios axios是一个前后端交互的工具,负责在前端代码,调用后端接口,将后端的数据请求到本地以后进行解析,然后传递给前端进行处理。 比如,我们用fastapi写了一个接口,这个接口返回了一条信息: …

LeetCode | 709.转换成小写字母

这道题可以用api也可以自己实现,都不难,大小字母之前相差了32,检查到大写字母时加上32即可 class Solution(object):def toLowerCase(self, s):""":type s: str:rtype: str"""return s.lower()class Solution…

韩顺平0基础学java——第22

p460-483 常用类 包装类Wrapper 针对8种几种数据类型相应的引用类型——包装类 包装类和基本数据类型的转换 jdk5之前的手动装箱和拆箱: jdk5之后的自动装箱和拆箱: 三元运算符是一个整体: 这个三元运算符里,精度最高的是doubl…

机器学习周记(第四十三周:MCformer)2024.6.10~2024.6.16

目录 摘要ABSTRACT1 论文信息1.1 论文标题1.2 论文摘要1.3 论文引言1.4 论文贡献 2 论文模型2.1 问题定义2.2 可逆实例归一化(Reversible Instance Normalization)2.3 混合通道块 (Mixed-Channels Block)2.4 编码器(De…

MPLS VPN一

R1为客户,现在进行一些基本配置,来确保可以通路由 先启动OSPF跑通 在R3上 等一会 现在启动MPLS 对R3 对R4 然后在R2上 再把接口划到空间里面 原来的IP在公网里面,被清除了 然后再配置接口 查看 对R1(相当于客户) …

CrossOver和PD虚拟机谁更强大?CrossOver和PD虚拟机应该怎么选择

在当前的虚拟化技术和应用程序兼容性解决方案中,CrossOver和PD虚拟机(Parallels Desktop)都是备受用户喜爱的选择。对于需要在非原生系统上运行应用程序的用户而言,选择合适的工具尤为重要。那么,CrossOver和PD虚拟机谁…

虚表-在成员函数前面加上virtual后发生了什么事情???

从上图得出: 子类继承的父类的虚表指针吗? 答:是的。 子类和父类是同一个虚表还是不同的虚表? 答:不同的虚表,倘若是同一个当子类进行覆盖的时候,父类的虚表会丢失。 下面有一些方法来观察类…

【linux】认识“文件”的本质,理解“文件系统”的设计逻辑,体会linux优雅的设计理念

⭐⭐⭐个人主页⭐⭐⭐ ~~~~~~~~~~~~~~~~~~ C站最❤❤❤萌❤❤❤博主 ~~~~~~~~~~~~~~~~~~~ ​♥东洛的克莱斯韦克-CSDN博客♥ ~~~~~~~~~~~~~~~~~~~~ 嗷呜~ ✌✌✌✌ 萌妹统治世界~ 🎉🎉🎉🎉 ✈✈✈✈相关文章✈✈✈✈ &#x1f4a…

虚函数表共享和生成

每个类有不同的虚表,相同的类使用相同的虚表 模拟动态绑定的一个过程

【Apache Doris】周FAQ集锦:第 6 期

【Apache Doris】周FAQ集锦:第 6 期 SQL问题数据操作问题运维常见问题其它问题关于社区 欢迎查阅本周的 Apache Doris 社区 FAQ 栏目! 在这个栏目中,每周将筛选社区反馈的热门问题和话题,重点回答并进行深入探讨。旨在为广大用户和…