【React Fiber的重要属性】

Fiber

前言

可以结合我的另外两篇文章来参考
React渲染流程原理揭秘
React的Fiber及中断-重启逻辑的设计

核心属性

创建Fiber的构造函数

属性 作用 何时赋值
tag Fiber类型(例子:0 函数组件 1 类组件),决定当前Fiber渲染逻辑的调用 创建Fiber的时候会根据type等信息赋予对应的值
mode 渲染类型, 0 同步阻塞渲染 1 中断-重启渲染 继承parent Fiber的mode值,根FiberNode的mode来自于固定传入
lanes 可以理解为还未处理的更新任务,只有这个值存在才会触发当前组件的重新执行,渲染新的内容 调用(const [ state, setState ] = useState())setState回调函数之后会产生并通过位运算符与加到该属性上
child child的FiberNode(一个或者多个,多个的时候会通过sibling串成一个child链表),但注意child永远只会保存第一个child的FiberNode 在父Fiber渲染之后会调用reconcileChildren生成child的FiberNode,并顺势挂载到当前child的属性上
return 父FiberNode 调用reconcileChildren生成child的FiberNode的时候顺势将parent的FiberNode挂载到return属性上
sibling 下一个兄弟FiberNode 当存在多个child的时候,在循环遍历生成child的FiberNode的时候,顺势将下一个FiberNode赋值到sibling属性上
alternate 保存组件上一个态的快照,位后续渲染时比较新旧Fiber是否变化提供依据 更新周期中为当前Fiber创建child Fiber的时候会为child Fiber绑定alternate属性的值
memoizedState 记录当前组件的hook链(hook是React记录useState等钩子产生的对象,与Fiber一样也是链式的结构,通过next属性绑定关联关系) 执行组件函数遇到useState()会产生一个hook对象,并顺势将第一个hook赋值给memoizedState属性

Fiber链表的指向关系

主要是通过child,return,sibling这几个属性明确Fiber的指向关系

Fiber链表是如何进行遍历的

结合上面的图和child属性说结论,React在遍历链表Render的过程中是先深后横再回溯 (child,sibling,return)。

循环的过程中,优先返回FiberNode.child作为下一次循环的值,而FiberNode.child永远只保存第一个子元素的FiberNode。所以是按照深度进行遍历,到根节点后再借助sibling遍历兄弟FiberNode,最后再借助return返回上一层节点继续遍历兄弟FiberNode。最后回到根节点然后退出循环渲染的逻辑。

相关推荐
2501_944448002 小时前
Flutter for OpenHarmony衣橱管家App实战:支持我们功能实现
android·javascript·flutter
会跑的葫芦怪8 小时前
若依Vue 项目多子路径配置
前端·javascript·vue.js
2601_949593658 小时前
基础入门 React Native 鸿蒙跨平台开发:模拟智能音响
react native·react.js·harmonyos
xiaoqi9229 小时前
React Native鸿蒙跨平台如何进行狗狗领养中心,实现基于唯一标识的事件透传方式是移动端列表开发的通用规范
javascript·react native·react.js·ecmascript·harmonyos
jin1233229 小时前
React Native鸿蒙跨平台剧本杀组队消息与快捷入口组件,包含消息列表展示、快捷入口管理、快捷操作触发和消息详情预览四大核心功能
javascript·react native·react.js·ecmascript·harmonyos
烬头882111 小时前
React Native鸿蒙跨平台实现二维码联系人APP(QRCodeContactApp)
javascript·react native·react.js·ecmascript·harmonyos
pas13611 小时前
40-mini-vue 实现三种联合类型
前端·javascript·vue.js
摇滚侠11 小时前
2 小时快速入门 ES6 基础视频教程
前端·ecmascript·es6
2601_9498333911 小时前
flutter_for_openharmony口腔护理app实战+预约管理实现
android·javascript·flutter
军军君0112 小时前
Three.js基础功能学习十三:太阳系实例上
前端·javascript·vue.js·学习·3d·前端框架·three