网站首页 > 技术文章 正文
大家好,我是前端西瓜哥。
本文探究 fiber、DOM、ReactElement、类组件实例对象之间的引用关系。
React 版本为 18.2.0
原生组件 fiber
原生组件 fiber,指的就是 type 为 "span"、"div" 的 fiber。
- fiber.stateNode 指向真实 DOM 节点;
- node["__reactFiber#34; + randomKey] 指向对应 fiber,使用随机数是防止和业务代码的属性名冲突,起着类似 symbol 的效果;
- node["__reactProps#34; + randomKey] 指向最新 props 对象;
类组件 fiber
- fiber.stateNode 指向类实例对象 instance;
- instance.__reactInternalSnapshotBeforeUpdate 指向 snapshot 对象(该对象通过 getSnapshotBeforeUpdate 生成,并提供给 componentDidUpdate 使用);
利用 DOM 节点的 ['__reactFiber#39; + randomKey] 属性,我们能拿到对应的原生组件 fiber。
通过这个 fiber,我们其实拿到了整棵 fiber 树。比如我们可以通过递归访问 fiber.return 找到它所在的类组件或函数组件 fiber。
在控制台选中一个元素,然后输入 $0.__reactFi 然后按下 tab 键补全属性,然后回车,我们就拿到了一个原生组件 fiber。
通过这个小技巧,我们可以去观摩观摩使用了 React 的网站的 fiber 树结构,比如 figma。
React 版本太低的话,是没有这个属性的。
根 fiber
rootFiber 是一棵 fiber 树的根节点。
fiberRoot 是 fiber 树的根节点的维护者,它的 current 决定使用两棵 fiber 树的那一棵(使用了双缓存技术)。
- fiberRoot.current 指向一个 rootFiber 节点;
- rootFiber.stateNode 指向 fiberRoot;
- rootNode["__reactContainer#34; + randomKey] 指向 rootFiber
ReactElement
ReactElement 的 _owner 指向向上最近的类组件或函数组件 fiber。
结尾
我是前端西瓜哥,欢迎关注我,学习更多前端知识。
猜你喜欢
- 2025-09-21 Google 开源 zx,用 async/await 编写 shell 脚本
- 2025-09-21 macOS 上如何写自定义命令行工具?
- 2025-09-21 为什么需要前端水印?_前端水印和后端水印的差别
- 2025-09-21 前端必会:Promise 全解析,从原理到实战
- 2025-09-21 JavaScript中this指向各种场景_javascript的this指向
- 2024-12-13 一文让你彻底搞懂 vuex,满满的干货
- 2024-12-13 vue前端通过Base64编码解码
- 2024-12-13 「前端进阶」高性能渲染十万条数据(虚拟列表)
- 2024-12-13 Web前端新人笔记之了解Jquery
- 2024-12-13 typeScript 学习笔记(二)——数据类型大全
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)