0

0

什么是React Fiber

WBOY

WBOY

发布时间:2022-04-19 11:48:19

|

3980人浏览过

|

来源于php中文网

原创

React Fiber是一个类似双向链表的数据结构;ReactDom会根据jsx,为每个dom节点生成一个fiber节点,child指向第一个子节点、sibling指向下一个兄弟节点、return指向父节点的数据结构就是fiber数据结构。

什么是React Fiber

本教程操作环境:Windows10系统、react17.0.1版、Dell G3电脑。

什么是React Fiber

fiber是个什么东西?因为English是国外程序员的母语,所以他们对代码中的命名都是有考究。fiber意思是纤程,大家都知道进程、线程,纤程是较线程更细的东西。因为JS是单线程的,所以从这个角度分析,fiber的命名是很有考究的。

以上是fiber概念,在代码中fiber是什么呢?其实fiber就是一个类似双向链表的数据结构。如下图:

06.png

reactDom会根据jsx,为每个dom节点生成一个fiber节点,(注意:当textNode是唯一的子节点时,不会单独生成fiber节点),child指向第一个子节点,sibling指向下一个兄弟节点,return指向父节点。这样的数据结构就是fiber数据结构,当然fiber中还有存储了其他数据。

fiber工作原理

  已经了解了fiber的数据结构,那么fiber是如何在react异步可中断的更新中发挥作用的呢?

  首先我们先看下原来react虚拟dom(v16之前版本)为什么支持不了可中断的更新,首先我们假设虚拟都没可以中断(实际不可中断),比如以下代码

阿里云-虚拟数字人
阿里云-虚拟数字人

阿里云-虚拟数字人是什么? ...

下载
// 更新前
 
  • 1
  • 2
  • 3
// 更新一
  • 2
  • 3
  • 4

  我们把123更新为234(更新一),在更新过程中,当1->2, 2->3完成时被中断了,3没有变成4,那么结果就是233,这就产生了bug。

  react v16解决的方式是双缓存技术,即在更新时,react存储两个fiber数据结构,如下图:

07.png

  上图中,rootFiber是react应用,footFiberNode是应用挂在的节点,current指向的fiber是渲染在页面中的fiber(即出现在屏幕中的视图),我们称它未current fiber,current fiber的每一个fiber节点都有一个alternode指向另一个棵树的相同fiber节点,我们称这个fiber为workInProgress fiber。

  我们知道,当react v16前的版本更新时,会进行jsx和虚拟dom树进行diff算法,计算结果就是最终需要更新的视图。而在react v16 diff算法是将jsx和workInProgress fiber进行计算,最终得出最终视图,然后将current指针指向workInProgress fiber,渲染新的视图。跟workInProgress fiber进行diff算法是在内存中进行的,即使被中断也对现有视图不产生影响。

推荐学习:《react视频教程

相关专题

更多
treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

536

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

17

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

22

2026.01.06

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

482

2023.08.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

510

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

244

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

278

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5296

2023.08.17

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 4万人学习

国外Web开发全栈课程全集
国外Web开发全栈课程全集

共12课时 | 1.0万人学习

React核心原理新老生命周期精讲
React核心原理新老生命周期精讲

共12课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号