什么是React Fiber
时间:2022-04-21 [网络编程]作者:fabuyuan 浏览:8 次
React Fiber是一个类似双向链表的数据结构;ReactDom会根据jsx,为每个dom节点生成一个fiber节点,child指向第一个子节点、sibling指向下一个兄弟节点、return指向父节点的数据结构就是fiber数据结构。
本教程操作环境:Windows10系统、react17.0.1版、Dell G3电脑。
什么是React Fiber
fiber是个什么东西?因为English是国外程序员的母语,所以他们对代码中的命名都是有考究。fiber意思是纤程,大家都知道进程、线程,纤程是较线程更细的东西。因为JS是单线程的,所以从这个角度分析,fiber的命名是很有考究的。
以上是fiber概念,在代码中fiber是什么呢?其实fiber就是一个类似双向链表的数据结构。如下图:
reactDom会根据jsx,为每个dom节点生成一个fiber节点,(注意:当textNode是唯一的子节点时,不会单独生成fiber节点),child指向第一个子节点,sibling指向下一个兄弟节点,return指向父节点。这样的数据结构就是fiber数据结构,当然fiber中还有存储了其他数据。
fiber工作原理
已经了解了fiber的数据结构,那么fiber是如何在react异步可中断的更新中发挥作用的呢?
首先我们先看下原来react虚拟dom(v16之前版本)为什么支持不了可中断的更新,首先我们假设虚拟都没可以中断(实际不可中断),比如以下代码
// 更新前 <ul> <li>1</li> <li>2</li> <li>3</li> </ul> // 更新一 <ul> <li>2</li> <li>3</li> <li>4</li> </ul>
我们把123更新为234(更新一),在更新过程中,当1->2, 2->3完成时被中断了,3没有变成4,那么结果就是233,这就产生了bug。
react v16解决的方式是双缓存技术,即在更新时,react存储两个fiber数据结构,如下图:
上图中,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视频教程》
以上就是什么是React Fiber的详细内容,更多请关注站长家园其它相关文章!
本文标签: React
转载请注明来源:什么是React Fiber
本文永久链接地址:https://www.adminjie.com/post/11413.html
免责声明:
本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
附:
二○○二年一月一日《计算机软件保护条例》第十七条规定:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬!鉴于此,也希望大家按此说明研究软件!
版权声明:
一、本站致力于为软件爱好者提供国内外软件开发技术和软件共享,着力为用户提供优资资源。
二、本站提供的部分源码下载文件为网络共享资源,请于下载后的24小时内删除。如需体验更多乐趣,还请支持正版。
三、我站提供用户下载的所有内容均转自互联网。如有内容侵犯您的版权或其他利益的,若有侵犯你的权益请:提交版权证明文件到邮箱 2225329873#qq.com(#换为@) 站长会进行审查之后,情况属实的会在三个工作日内为您删除。
更多精彩内容
- VUE中V-IF条件判断改变元素的样式操作
- Discuz如何解决安装时报错run_sql_error
- 低版本VS项目在VS2019无法正常编译的问题
- PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
- Oracle数据库的实例/表空间/用户/表之间关系简单讲解
- RSA2是啥?PHP-RSA2签名验证怎么实现?
- 华为dubal20是什么型号
- ana an00华为是什么型号
- html5的标题标记一共有几个等级
- 电脑显示信号线无连接是什么意思
- app是什么应用程序的简称
- html5中onclick是什么意思
- angular与bootstrap的区别是什么
- vivov1818a是什么手机型号
- 超链接的作用是什么

- 最新文章
-
-
浅析Vue中的插件和组件,聊聊它们的区别!
组件是什么?插件是什么?下面本篇文章带大家了解一下Vue中的插件和组件,聊聊插件和组件的区别,希望对大家有所帮助!一、组件是什么回顾以前对组件的定义:组件就是把...
-
带你搞懂Java结构化数据处理开源库SPL
本篇文章给大家带来了关于java的相关知识,其中主要介绍了关于结构化数据处理开源库SPL的相关问题,下面就一起来看一下java下理想的结构化数据处理类库,希望对...
-
图文详解怎么用Python绘制动态可视化图表
本篇文章给大家带来了关于python的相关知识,其中主要介绍了关于绘制动态可视化图标的相关问题,使用Python的Plotly图形库,让你可以毫不费力地生成动画...
-
JavaScript高级语法学习之严格模式
本篇文章给大家带来了关于javascript的相关知识,其中主要介绍了关于严格模式的相关问题,严格模式很好理解,是一种具有限制性的JavaScript模式,从而...
-
归纳总结Oracle视图知识点
本篇文章给大家带来了关于Oracle的相关知识,其中主要介绍了关于视图的相关问题,视图是一种数据库对象,是从一个或者多个数据表或视图中导出的虚表,下面一起来...
-
- 热门文章
-
-
VUE中V-IF条件判断改变元素的样式操作
这篇文章主要介绍了VUE中V-IF条件判断改变元素的样式操作,具有很好的参考价值,希望对大家有所帮助。一起跟随想过来看看吧...
-
Discuz如何解决安装时报错run_sql_error
问题环境VMware虚拟机Centos7.3PHP7.0MySQL8.0NGINX1.14Discuz3.4问题还原本地环境为PHP5.6+MySQL5.6在安...
-
低版本VS项目在VS2019无法正常编译的问题
低版本VS项目在VS2019无法正常编译的问题这里指的编译并不准确,只是为了方便说明。后有(未安装),201?...
-
PHP+Redis链表解决高并发下商品超卖问题(实现原理及步骤)
实现原理使用redis链表来做,因为pop操作是原子的,即使有很多用户同时到达,也是依次执行,推荐使用。实现步骤第一步,先将商品库存入队列/**.trigge...
-
Oracle数据库的实例/表空间/用户/表之间关系简单讲解
完整的Oracle数据库通常由两部分组成:Oracle数据库和数据库实例。Oracle是一种数据库管理系统,是一种关系型的数据库管理系统。我们用这些高级权限账号...
-