React原理之Fiber详解

news2024/11/17 1:28:03

前置文章:

  1. React原理之 React 整体架构解读
  2. React原理之整体渲染流程

-----读懂这一篇需要对 React 整体架构和渲染流程有大致的概念 😊-----

在React原理之 React 整体架构解读中,简单介绍了 Fiber 架构,也了解了 Fiber 节点的概念。

Fiber 节点是 Fiber 架构的核心概念之一,它是一种虚拟 DOM 的实现方式。

Fiber 本质上是一个对象, 使用了链表结构

双重缓冲是一种渲染优化技术,其使用两个 Fiber 树来管理渲染,即当前树 current tree工作树 work-in-progress tree。当前树代表屏幕上当前显示的内容,而工作树用于准备下一次的渲染更新,用以实现平滑的更新。

Fiber 的含义

前面反复提到,与 React16 之前的栈式架构相比,Fiber 架构中的更新工作是可以中断的循环过程。

fiber 译为“纤维”,React 的 Fiber 架构借鉴了 Fiber 作为轻量级、可调度执行单元的概念,将其应用于组件的渲染和更新过程中。

实际上,Fiber包含三层含义:

  1. fiber 架构
  2. 静态的数据结构
  3. 动态的工作单元

fiber 架构

React16之前的Reconciler采用递归的方式执行,数据保存在递归调用栈中,所以被称为stack ReconcilerReact16Reconciler基于Fiber节点实现,被称为Fiber Reconciler,各个 FiberNode 之间通过链表的形式串联起来。

在这里插入图片描述

看一下简化版源码:

function FiberNode(tag, pendingProps, key, mode) {
	//...

	// Fiber树结构:周围的 Fiber Node 通过链表的形式进行关联
	this.return = null; // 上一级节点
	this.child = null; // 第一个子节点
	this.sibling = null; // 下一个同级节点
	this.index = 0; // 在上一级节点中的索引

	//...
}

静态的数据结构

作为静态的数据结构来说,每个Fiber节点对应一个React element,保存了该组件的类型(函数组件/类组件/原生组件…)、对应的 DOM 节点等信息。

function FiberNode(tag, pendingProps, key, mode) {
	//...
	// 实例属性:

	// 节点类型标记 Function/Class/Host...
	this.tag = tag;
	// key属性
	this.key = key;
	// 组件的元素类型,大部分情况同type,某些情况不同,比如FunctionComponent使用React.memo包裹
	this.elementType = null;
	// 实际的 JavaScript 对象类型。对于 FunctionComponent,指函数本身,对于ClassComponent,指class,对于HostComponent,指DOM节点tagName
	this.type = null;
	// 节点对应的真实DOM节点
	this.stateNode = null;
	//...
}

动态的工作单元

作为动态的工作单元来说,每个Fiber节点保存了本次更新中该组件改变的状态、要执行的工作(需要被删除/被插入页面中/被更新…)。

// Props和State 改变相关信息
this.pendingProps = pendingProps; // 当前待处理的props
this.memoizedProps = null; // 上次渲染完成,已应用到组件的props
this.updateQueue = null; // 更新队列,用于存储状态更新和回调
this.memoizedState = null; // 上次渲染完成后的state,即组件的当前状态
this.dependencies = null; // 依赖列表,用于追踪副作用

this.mode = mode; // Fiber的模式

// Effects 副作用
this.flags = NoFlags; // Fiber的标志位,表示Fiber的生命周期状态
this.subtreeFlags = NoFlags; // 子树的标志位
this.deletions = null; // 待删除的子Fiber列表

// 优先级调度
this.lanes = NoLanes; // 当前Fiber的优先级
this.childLanes = NoLanes; // 子Fiber的优先级

下一篇:React原理之Fiber双缓冲

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

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

相关文章

一个云端应用市场和配套的移动办公APP,支持iOS和Android端,可私有部署,支持在线体验(附源码)

前言 在当前的企业应用市场中,许多移动办公软件不仅成-本高昂,而且在功能对接和接口完整性方面存在不足,导致开发成本居高不下。这促使企业和开发者寻求更加经济、高效且功能丰富的处理方案。 介绍 O2OA(翱途)开发平…

【15】大数据题目等

目录 一.大数据题目的解题技巧​编辑 二.找重复的URL 三.利用小内存找出所有出现两次的数。 四.位运算题目 五.面试原题 六,.判断一个32位正数是不是2的幂,4的幂 七.位运算实现加减乘除 加法 减法 乘法 除法 一.大数据题目的解题技巧 二.找重复的URL 方法…

uni-app--》打造个性化壁纸预览应用平台(一)

🏙️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名前端工程师 🌄个人主页:亦世凡华、 🌆系列专栏:uni-app 🌇座右铭:人生亦可燃烧,亦可腐败&#xf…

linux更换为阿里云的yum下载镜像源

更换镜像源 1.备份: sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.创建一个文件: cd /etc/yum.repos.d/ touch CentOS-Base.repo 3.往CentOS-Base.repo添加内容 vi CentOS-Base.repo 添加以下内容: [base…

vue3 组合式 API:setup()

查看vue3官网介绍:组合式 API:setup() 在 Vue 3 中,组合式 API 的 setup() 函数是一个非常重要的特性,它提供了一种更灵活和可维护的方式来组织组件的逻辑。 基本概念 setup() 函数是在组件实例创建之前执行的,它用于…

重复玩一个游戏就是自闭症吗?自闭的特征有哪些?

重复玩一个游戏并不一定是自闭症的标志。儿童在成长过程中,有时会因为对某个游戏或活动的喜爱而反复进行,这是他们探索世界、发展兴趣和技能的一种方式。然而,如果这种行为伴随着其他自闭症的典型特征,如语言障碍、社交障碍和兴趣…

C语言 ——— 修改默认对齐数以及结构传参

目录 前言 修改默认对齐数 结构体传参 前言 在上一篇中,有讲解到结构体内存对齐的规则以及默认对齐数 C语言 ——— 结构体内存对齐-CSDN博客 修改默认对齐数 修改默认对齐数所需要的宏命令:#pragma 代码演示: #pragma pack(1) // 将默…

MVCC工作原理深入解析

一、事务概述 mysql事务是指一组命令操作,在执行过程中用来保证要么全部成功,要么全部失败。事务是由引擎层面来支持的,MyISM引擎不支持事务,InnoDB引擎支持事务。 事务具有ACID四大特性 原子性(Atomicity&#xff0…

XSS靶场(1-11关)

目录 简述xss xss第1关 xss第2关 ​编辑 xss第3关 xss第4关 xss第5关过滤了 on script xss第6关 xss第7关 xss第8关 xss第9关 xss第10关 xss11关 我把源代码靶场放到了最顶端 简述xss XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法…

【数据结构与算法 | 图篇】最小生成树之Prim算法

1. 前言 普里姆算法(Prims Algorithm)是一种用于寻找加权无向图中的最小生成树(Minimum Spanning Tree, MST)的贪心算法。 最小生成树是指对于一个给定的无向图,连接所有顶点且边的总权重最小的生成树。 2. 算法步骤 …

Spring Boot 核心配置

一、 Spring Boot配置文件分类 SpringBoot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者application.yml(application.yaml)进行配置 applicat…

外贸市场开发【越南】

​作为“新兴之秀” 越南的经济发展可谓是突飞猛进 并在2022年,成为全亚洲经济增长最快速经济体 经济的增长也让越南的地位变得不一样了 一起来看看外贸人聚焦的东南亚排名前五的越南 越南社会主义共和国,通称越南,是位于东南亚的中南半岛…

谷粒商城实战笔记-213-商城业务-认证服务-整合短信验证码服务

文章目录 一,开通阿里云云市场短信服务1,阿里云开通免费短信服务并调试2,整合短信服务2.1 下载HttpUtils代码2.2 开发调用短信服务的组件2.3 测试 HttpUtils代码 这一节主要内容是整合短信发送服务。 一,开通阿里云云市场短信服务…

多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测

多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现CPO-BP冠豪猪优化…

CUDA-MODE课程笔记 第6课: 如何优化PyTorch中的优化器

我的课程笔记,欢迎关注:https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode CUDA-MODE课程笔记 第6课: 如何优化PyTorch中的优化器 课程内容 上面三张Slides讲述了运行时间(runtime)和内存使用&…

ChatGPT 3.5/4.0 新手使用手册(详细版)

1. 什么是 ChatGPT? ChatGPT是由 OpenAI 开发的先进人工智能语言模型,能够理解并生成自然语言文本。它可以帮助你进行写作、回答问题、提供建议,甚至参与对话。ChatGPT 3.5 和 4.0 是两个不同版本,它们都拥有强大的语言处理能力&…

sublime text 4 安装(含激活码)安装破解汉化 Sublime Text 4 的操作指南

sublime text 4 安装(含激活码) 一、下载步骤 官网地址:Sublime Text - the sophisticated text editor for code, markup and prosehttps://link.zhihu.com/?targethttps://www.sublimetext.com/ windows下载链接:Thank You -…

【数据结构算法经典题目刨析(c语言)】使用数组实现循环队列(图文详解)

💓 博客主页:C-SDN花园GGbond ⏩ 文章专栏:数据结构经典题目刨析(c语言) 目录 一.题目描述 二.解题思路 1.循环队列的结构定义 2.队列初始化 3.判空 4.判满 5.入队列 6.出队列 7.取队首元素 8.取队尾元素 三.完整代码实…

【Datawhale AI夏令营第四期】魔搭-AIGC方向 Task03笔记 原神风格Lora尝试 ComfyUI Lora微调 补充选学内容

【Datawhale AI夏令营第四期】魔搭-AIGC方向 Task03笔记 原神风格Lora尝试 ComfyUI Lora微调 首先我们继续推进网课进度。 https://space.bilibili.com/1069874770 传送门 WorldArt锦书产品介绍: 我属实是没想到这个产品居然还可以用作遗迹鉴定和名家笔记仿写这样…

2.2算法的时间复杂度与空间复杂度——经典OJ

本博客的OJ标题均已插入超链接,点击可直接跳转~ 一、消失的数字 1、题目描述 数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗? 2、题目分析 (1)numsS…