跳到主要内容
版本:0.86

React Native DevTools

React Native DevTools 是我们为 React Native 提供的现代调试体验。它从零开始专门构建,旨在从根本上比以往的调试方法更集成、更正确、更可靠。

React Native DevTools 打开到“Welcome”面板

React Native DevTools 旨在用于调试 React 应用相关的问题,而不是取代原生工具。如果你想检查 React Native 的底层平台层(例如在开发 Native Module 时),请使用 Android Studio 和 Xcode 中可用的调试工具(参见 调试原生代码)。

💡 兼容性 — 在 0.76 中发布

React Native DevTools 支持所有运行 Hermes 的 React Native 应用。它取代了之前的 Flipper、Experimental Debugger 和 Hermes debugger(Chrome)前端。

无法在任何更早版本的 React Native 上设置 React Native DevTools。

  • Chrome 浏览器 DevTools — 不支持
    • 通过 chrome://inspect 连接到 React Native 已不再受支持。某些功能可能无法正常工作,因为最新版本的 Chrome DevTools(它们是为了匹配最新的浏览器能力和 API 而构建的)尚未经过测试,并且此前端缺少我们的自定义内容。作为替代,我们随 React Native DevTools 提供了受支持的版本。
  • Visual Studio Code — 不支持(已存在)
    • Expo Tools 和 Radon IDE 等第三方扩展可能具有更好的兼容性,但并未得到 React 团队的直接支持。
💡 反馈与常见问题

我们希望你用于在所有平台上调试 React 的工具可靠、熟悉、简单且一致。本页描述的所有功能都基于这些原则构建,我们也希望在未来提供更多能力。

我们正在积极迭代 React Native DevTools 的未来,并创建了一个集中的 GitHub discussion 来跟踪问题、常见问题和反馈。

核心功能​

React Native DevTools 基于 Chrome DevTools 前端。如果你有 Web 开发背景,它的功能应该会很熟悉。作为起点,我们建议浏览 Chrome DevTools 文档,其中包含完整指南以及视频资源。

控制台​

React Native DevTools Sources 视图中的一系列日志,以及一台设备

Console 面板允许你查看和筛选消息、求值 JavaScript、检查对象属性等。

Console features reference | Chrome DevTools

实用提示​

  • 如果你的应用有很多日志,请使用过滤框或更改显示的日志级别。
  • 使用 Live Expressions 随时间观察值。
  • 使用 Preserve Logs 在刷新后保留消息。
  • 使用 Ctrl + L 清空控制台视图。

Sources 与断点​

React Native DevTools Sources 视图中的一个暂停断点,以及一台设备

Sources 面板允许你查看应用中的源文件并设置断点。使用断点来定义一行代码,使你的应用在此处暂停——从而让你检查程序的实时状态,并逐步执行代码。

Pause your code with breakpoints | Chrome DevTools

提示

小指南​

断点是你调试工具箱中的基础工具!

  1. 使用侧边栏或 Cmd ⌘+P / Ctrl+P 导航到源文件。
  2. 点击代码行旁边的行号栏以添加断点。
  3. 在暂停时,使用右上角的导航控件 逐步执行代码。

实用提示​

  • 当你的应用暂停时,会出现 “Paused in Debugger” 覆盖层。点按它以继续运行。
  • 在断点处要留意右侧面板,它们允许你检查当前作用域和调用栈,并设置监视表达式。
  • 使用 debugger; 语句可以从文本编辑器中快速设置断点。通过 Fast Refresh,它会立即到达设备。
  • 断点有多种类型!例如,条件断点和日志点。

网络
自 0.83 起
​

React Native DevTools Network 面板中的一个网络请求

Network 面板允许你查看和检查应用发出的网络请求。记录的请求会提供详细元数据,例如时间和发送/接收的标头,以及响应预览。

当 DevTools 打开时,网络请求会自动记录。我们支持 Chrome 的大多数功能,但有一些例外。更多内容见下文。

💡 网络事件覆盖范围,Expo 支持

会捕获哪些网络事件?

目前,我们通过 fetch()、XMLHttpRequest 和 <Image> 记录所有网络调用——对 Expo Fetch 等自定义网络库的支持将在后续提供。

Expo Network 的差异

因此,使用 Expo 的应用仍会看到 “Expo Network” 面板——这是 Expo 框架提供的一个单独实现,它会记录这些额外的请求来源,但功能略少。

  • 覆盖 Expo 特定的网络事件。
  • 不支持请求发起方。
  • 不集成 Performance 面板。

我们正在与 Expo 合作,在未来版本中将 Expo Fetch 和第三方网络库集成到我们的新 Network 检查流程中。

未实现的功能

在发布时,我们在 React Native 中尚不支持以下功能:

  • WebSocket 事件
  • 网络响应模拟
  • 模拟网络限速
💡 响应预览缓冲区大小

如果你正在检查大量响应数据,请注意响应预览会缓存在设备上的一个缓冲区中,最大大小为 100MB。这意味着如果缓存过大,我们可能会逐出响应预览(但不会逐出元数据),且会优先逐出最早的请求。

实用提示​

  • 使用 Initiator 选项卡查看网络请求在你的应用中是在哪里发起的调用栈。
  • 网络事件也会显示在 Performance 面板中的 Network 轨道里。

性能
自 0.83 起
​

React Native DevTools Performance 面板中的一条性能轨迹

性能跟踪允许你在应用内记录性能会话,以了解 JavaScript 代码是如何运行的,以及哪些操作耗时最多。在 React Native 中,我们会在单一性能时间线中展示 JavaScript 执行、React Performance 轨道、Network 事件以及自定义的 User Timings。

实用提示​

  • 使用 Annotations(按住 Shift 拖动)为性能轨迹添加标签和标注——在将轨迹 下载并分享 给同事之前非常有用。Annotations 还提供了一种快速衡量以 秒 为单位时间跨度的方法。
  • 在你的应用中使用 PerformanceObserver API 来在运行时观察性能事件——如果你想捕获性能遥测,这会很有用。

了解更多​

内存​

在 Memory 面板中检查堆快照

Memory 面板允许你拍摄堆快照,并随时间查看 JavaScript 代码的内存使用情况。

Record heap snapshots | Chrome DevTools

实用提示​

  • 使用 Cmd ⌘+F / Ctrl+F 筛选堆中的特定对象。
  • 进行 allocation timeline report 有助于以图表形式查看随时间变化的内存使用情况,从而识别可能的内存泄漏。

React DevTools 功能​

在集成的 Components 和 Profiler 面板中,你会找到 React DevTools 浏览器扩展的所有功能。这些功能在 React Native DevTools 中可无缝工作。

React Components​

使用 React Components 面板选择并定位元素

React Components 面板允许你检查并更新已渲染的 React 组件树。

  • 在 DevTools 中悬停或选择一个元素,可在设备上高亮显示它。
  • 要在 DevTools 中定位某个元素,点击左上角的 “Select element” 按钮,然后点按应用中的任意元素。

实用提示​

  • 可以使用右侧面板在运行时查看和修改组件的 props 与 state。
  • 使用 React Compiler 优化的组件会带有 “Memo ✨” 徽标标注。
提示

专业提示:高亮重新渲染​

重新渲染可能是 React 应用性能问题的重要原因。DevTools 可以在组件重新渲染发生时将其高亮显示。

  • 要启用此功能,点击 View Settings(⚙︎)图标,并勾选 “Highlight updates when components render”。

“highlight updates” 设置的位置,旁边是一段实时渲染覆盖层的录制

React Profiler​

以火焰图形式呈现的性能分析

React Profiler 面板允许你记录性能分析,以了解组件渲染和 React commits 的时序。

更多信息请参阅 原始的 2018 指南(请注意其中部分内容可能已过时)。

重新连接 DevTools​

有时,DevTools 可能会与目标设备断开连接。这可能发生在以下情况:

  • 应用已关闭。
  • 应用被重新构建(安装了新的原生构建版本)。
  • 应用在原生端崩溃。
  • 开发服务器(Metro)已退出。
  • 物理设备已断开连接。

断开连接时,将会显示一个对话框,提示信息为“Debugging connection was closed”。

设备断开连接时显示的重新连接对话框

在这里,你可以执行以下操作之一:

  • Dismiss:选择关闭(×)图标,或点击对话框外部,返回到断开连接前最后状态的 DevTools 界面。
  • Reconnect:在解决导致断开连接的原因后,选择“Reconnect DevTools”。