如何在console 里 打印 React Fiber 树?

众所周知React的性能好得益于 他杰出特性 Fiber架构设计, React Fiber 是 React 16 中引入的新的协调引擎或重写的核心算法, 真针Fiber的一个重要的核心概念Fiber Node。 Fiber Node 是对组件的实力在js代码层面的结构数据表现。 每个 Fiber Node 对应一个 React Element,并包含了关于组件的信息,比如其类型、属性等。Fiber Node 节点的关联组织 构成了Fiber Tree。 至于如何构建, 怎么diff 调和等 这里就不过多赘述。

这次主要的研究对象是: 如何从使用者/学习 者角度 在js 代码上 拿到fiber 树结构的信息。 比如页面构建完成后, console 对应的fiber tree 的json。

  1. 第一步:

    react 切入项目入口是在 ReactDom.render() 。如下图:

    又或者是通过createRoot 进而render 。 如下图:

  2. 第二步:

    查看react render 的源码 一探究竟。

    走到这里 大致就比较清晰了, 在root 节点上增加以字符串"__reactContainer" + 随机数 的属性, 属性值就是fiberRoot 节点。

    那是不是我们只要通过dom 节点 获取root 节点的"__reactContainer" + 随机数 的属性 就找到了react 的树节点, 夜就拿到了整棵树。

    流程图如下:

    3. 开始实施。

    js 复制代码
    const container = document.getElementById("app");
    Object.getOwnPropertyNames(container).forEach(key =>{
        if(key.startsWith("__reactContainer")){
            console.log(key, container[key])
        }
    } )

    控制台输出如下图

总结:

react 的fiber 是挂在了dom root 节点上 "__reactContainer" + 随机值 的, 但是不建议依赖__reactContainer$和随机键来获取Fiber节点,而是应该使用React提供的官方API和工具来管理组件和调试应用程序。

相关推荐
三十而立洋12 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁12 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王952714 小时前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大14 小时前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师14 小时前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学15 小时前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端
甜到心里的蛋糕15 小时前
加解密技术详解:纯前端如何实现 AES / SM4 / RSA / 国密 SM2
前端·密码学
拖孩16 小时前
代码我能全交给 AI,流量主这 500 个访客它一个都替不了我
前端·后端·微信小程序
2601_9638702116 小时前
基于SSM的特产代购系统
java·前端
paopaokaka_luck16 小时前
智慧社区综合服务小程序(人脸识别、AI问答、Echarts图形化分析)
前端·javascript·spring boot·spring·数据分析·echarts