菜单

开发者工具

相关源文件

React DevTools 是一套旨在帮助开发者调试和分析 React 应用程序的工具。本文档概述了 React DevTools 的架构、其各种实现方式以及关键功能。有关如何在您自己的应用程序中使用 React DevTools API 的信息,请参阅 React DevTools API 部分。

概述

React DevTools 主要有以下三种形式:

  1. 浏览器扩展 - 适用于 Chrome、Firefox 和 Edge
  2. 独立应用程序 - 使用 Electron,主要用于 React Native 调试
  3. 内联包 - 可以直接嵌入到其他应用程序中

这些工具提供了一整套全面的调试功能:

  • 检查 React 组件树
  • 查看和编辑组件的 props 和 state
  • 检查函数组件中的 React Hooks
  • 分析组件渲染性能
  • React 操作的时间轴记录
  • 带有组件堆栈的增强型控制台日志

架构

React DevTools 采用客户端-服务器架构,使其能够与不同环境中的 React 应用程序交互。

高层架构

来源

组件交互

来源

核心组件

DevTools Hook

DevTools Hook (__REACT_DEVTOOLS_GLOBAL_HOOK__) 在 React 加载之前注入页面。它会拦截 React 渲染器初始化并提供核心功能:

  • 跟踪已渲染的根节点
  • 观察 fiber 树更新
  • 收集性能指标
  • 支持组件检查

无论 React 如何加载,该 hook 都是 DevTools 与 React 集成的基础。

来源

后端桥接

后端桥接促进了 DevTools 前端与后端之间的通信。它使用基于协议的消息系统来处理:

  • 组件树更新
  • 组件选择
  • 属性检查
  • 性能分析数据

桥接协议版本确保了前端和后端之间的兼容性,并能检测版本不匹配。

来源

代理

Agent 作为后端的主要控制器,处理:

  • 组件选择
  • 属性检查和修改
  • 错误边界管理
  • 高亮显示 DOM 节点

它与 DevTools 前端保持连接,并将操作分派给渲染器接口。

来源

渲染器接口

每个 React 渲染器(DOM、Native 等)都有一个关联的 RendererInterface,它实现后端操作:

  • 组件树遍历
  • 组件属性访问
  • Hook 检查
  • 性能分析数据收集

该接口抽象了渲染器特定的细节,使 DevTools 能够跨平台一致地工作。

来源

前端存储

存储作为前端 UI 的唯一事实来源,维护:

  • 组件树结构
  • 选定的组件数据
  • 过滤偏好
  • 性能分析数据

UI 组件订阅存储以接收更新并相应地渲染。

来源

实现形式

浏览器扩展

浏览器扩展将 DevTools hook 和后端注入网页,并与浏览器开发者工具面板中的前端 UI 连接。

主要特性

  • Chrome/Edge 和 Firefox 使用 Manifest V3
  • 内容脚本注入 DevTools hook
  • 后台服务工作线程管理连接
  • 检测 React 并建立桥接连接

来源

独立应用程序

独立应用程序是一个基于 Electron 的应用程序,连接到 React Native 应用程序或网站。

  • 可以通过 WebSocket 连接到 React Native 应用程序
  • 提供与浏览器扩展类似的功能
  • 使用相同的核心后端/前端架构

来源

内联 DevTools

内联包允许将 React DevTools 嵌入到其他应用程序中

  • 简化的集成 API
  • 与其他实现相同的核心功能
  • 被 Storybook 和测试框架等工具使用

来源

主要功能

组件树检查

DevTools 提供一个可导航的 React 组件树,具有:

  • 组件类型和名称识别
  • 实例选择和过滤
  • 宿主组件高亮显示
  • 搜索和过滤功能

通过监听来自后端的操作,该树与 React 组件层次结构保持同步。

组件数据检查

选择组件时,DevTools 会显示:

  • 可编辑值的 props
  • 类组件的状态(State)
  • 函数组件的 Hooks
  • 上下文值和提供者
  • 源位置(如果可用)

来源

组件过滤

DevTools 允许过滤组件树以专注于相关组件:

  • 按组件类型过滤(例如,隐藏 DOM 元素)
  • 按组件名称过滤
  • 按组件位置过滤

过滤系统帮助开发者专注于应用程序组件并减少框架元素带来的干扰。

来源

性能分析

Profiler 记录组件渲染时间,帮助识别性能瓶颈:

  • 基于提交的渲染时间轴
  • 组件渲染持续时间
  • 交互追踪
  • 火焰图可视化

此外,时间轴视图通过调度和渲染细节,提供对 React 内部操作的更深层洞察。

来源

控制台集成

DevTools 增强了浏览器控制台,提供了:

  • 日志和错误中的组件堆栈跟踪
  • StrictMode 双重渲染日志的视觉区分
  • 将组件数据记录到控制台的功能
  • 从控制台日志中检查组件

来源

环境支持

React DevTools 支持多种环境:

环境扩展支持独立支持特殊功能
Chrome完整的调试集成
Firefox支持 Manifest V3
Edge与 Chrome 相同
React Native原生元素检查
服务器组件服务器组件树可视化
并发模式Lane 可视化,Suspense 跟踪

来源

后端实现细节

渲染器检测

DevTools 通过检测渲染器挂载并自动连接到 React DOM、React Native 或自定义 React 渲染器来与 React 交互。

  1. 全局 hook 被安装在环境中
  2. React 初始化并向 hook 注册渲染器
  3. DevTools 为每个渲染器创建渲染器接口
  4. 来自渲染器的操作被转换为 DevTools 操作

来源

组件堆栈生成

React DevTools 与 React 的组件堆栈帧生成集成,以:

  • 在控制台日志中显示组件堆栈
  • 显示组件的源位置
  • 提供错误边界信息

这种集成使用 React 内部的组件帧生成,并带有 DevTools 特定的增强功能。

来源

构建和配置

React DevTools 使用 webpack 构建其所有形式:

  • 浏览器扩展为面板、内容脚本和后台编译单独的 bundle
  • 独立应用程序构建后端和前端组件
  • 源映射支持 DevTools 本身的调试

特殊功能标志控制跨环境的行为:

  • 环境检测(Chrome、Firefox、Edge、Native)
  • 实验性功能
  • 开发版本 vs. 生产版本

来源

版本控制与兼容性

DevTools 使用桥接协议来确保前端和后端兼容性:

  • 协议版本指示通信能力
  • 版本检查防止前端和后端之间的不匹配
  • NPM 版本范围指示兼容版本

这使得在可能的情况下,较新的 React 版本可以与较旧的 DevTools 版本一起工作,并进行优雅降级。

来源

结论

React DevTools 是一套复杂的调试套件,具有模块化架构,支持多种环境。其基于桥接的通信系统、组件检查功能和性能分析工具使其成为 React 开发工作流程中不可或缺的一部分。可扩展的设计使其能够适应新的 React 功能和渲染目标,同时保持向后兼容性。