说说 React 中 fiber、DOM、ReactElement、实例对象之间的引用关系

news/2024/7/15 19:05:17 标签: react.js, javascript, 前端

原生组件 fiber

原生组件 fiber,指的就是 type 为 “span”、“div” 的 fiber。

1.fiber.stateNode 指向真实 DOM 节点;2.node["__reactFiber$" + randomKey] 指向对应 fiber,使用随机数是防止和业务代码的属性名冲突,起着类似 symbol 的效果;3.node["__reactProps$" + randomKey] 指向最新 props 对象;利用 DOM 节点的 ['__reactFiber$' + randomKey] 属性,我们能拿到对应的原生组件 fiber。

通过这个 fiber,我们其实拿到了整棵 fiber 树。比如我们可以通过递归访问 fiber.return 找到它所在的类组件或函数组件 fiber。

在控制台选中一个元素,然后输入 $0.__reactFi 然后按下 tab 键补全属性,然后回车,我们就拿到了一个原生组件 fiber。

通过这个小技巧,我们可以去观摩观摩使用了 React 的网站的 fiber 树结构,比如 figma。

React 版本太低的话,是没有这个属性的。

类组件 fiber

1.fiber.stateNode 指向类实例对象 instance;2.instance.__reactInternalSnapshotBeforeUpdate 指向 snapshot 对象(该对象通过 getSnapshotBeforeUpdate 生成,并提供给 componentDidUpdate 使用);根 fiber

rootFiber 是一棵 fiber 树的根节点。

fiberRoot 是 fiber 树的根节点的维护者,它的 current 决定使用两棵 fiber 树的那一棵(使用了双缓存技术)。

1.fiberRoot.current 指向一个 rootFiber 节点;2.rootFiber.stateNode 指向 fiberRoot;3.rootNode["__reactContainer$" + randomKey] 指向 rootFiberReactElement

ReactElement 的 _owner 指向向上最近的类组件或函数组件 fiber。

最后

最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。



有需要的小伙伴,可以点击下方卡片领取,无偿分享


http://www.niftyadmin.cn/n/89486.html

相关文章

Android ServiceManager

1.ServiceManager ServiceManager在init进程启动后启动,用来管理系统中的Service。 一般开机过程分为三个阶段: ①OS级别,由bootloader载入linux内核后,内核开始初始化,并载入built-in的驱动程序,内核完成开机后,载入init process,切换至user-space后,结束内核的循…

【flink】 各种join类型对比

表定义 动态表(dynamic table):动态表是流的另一种表达方式,动态表作为一个逻辑的抽象概念,使我们更容易理解flink中将streaming发展到table这个层次的设计,本质都是对无边界、持续变更数据的表示形式,所以动态表与流之…

【PAT甲级题解记录】1003 Emergency (25 分)

【PAT甲级题解记录】1003 Emergency (25 分) 前言 Problem:1003 Emergency (25 分) Tags:单源最短路径 dijkstra Difficulty:剧情模式 想流点汗 想流点血 死而无憾 Address:1003 Emergency (25 分) 问题描述 给定一个城市间构成的…

jdk8-Stream流

Stream 创建流 empty 创建空元素的streamof 传入元素创建streamiterate 通过UnaryOperator元算器,创建无限个元素的streamgenerate 通过Supplier 提供函数接口,创建 无限个元素的streamconcat 合并多个流 中间流 filter 过滤 map 一对一转换 flatMap …

Spring架构篇--2.5.4 远程通信基础--Select 源码篇--selector.close()总结

前言:通过selector 的poll 来完成所有socket 事件的监听,当不需要selector时 通过selector.close() 完成通道的关闭和资源的释放; 1 selector.close()关闭: AbstractSelector 类中close 方法: public final void cl…

简单说说OSI网络七层模型

如果你读过计算机专业,或者学习过网络通信,那你一定听说过 OSI 模型,它曾无数次让你头大。OSI 是 Open System Interconnection 的缩写,译为“开放式系统互联”。OSI 模型把网络通信的工作分为 7 层,从下到上分别是物理…

关于企业文档能力开放,你想知道的都在这里了

最近一个朋友向我请教关于企业文档能力开放的事,说了一大堆的问题,我是做技术的,有很多基础知识和理论要向同行学习,所以给他解答了一通,但是朋友觉得解释的没啥实际用处。。。其实这个能力对很多人来说可能都不太明白…

180 2 22222

选择题(共180题,合计180.0分) 1. 在项目开工会议期间,项目发起人告诉产品负责人和团队项目章程即将完成。然而,由于存在在紧迫的期限内满足政府监管要求的压力,发起人希望立即开始工作。产品负责人下一步应该做什么? A 告诉发起人…