如何报告错误
报告 React Native 的 bug 是开始为项目做出贡献的最佳方式之一。我们使用 GitHub issues 作为处理新 bug 报告的主要渠道。
在提交新 bug 之前,请搜索该 bug 是否已存在于我们的 issue 跟踪器中。大多数情况下,这是找到解决方案最快的方式,因为可能其他人已经遇到过同样的问题。
如果您在 issue 跟踪器中找不到您的 bug,您可以提交一个新的。创建新 issue 后,请确保您:
- 添加问题的描述。
- 遵循issue 模板上的说明。
- 添加您正在使用的 React Native 版本。
- 添加
npx @react-native-community/cli info命令的输出。 - 如果适用,添加问题的截图和视频。
所有 bug 报告还应包含一个重现器:即我们理解问题并协助调试所需的代码。
由于我们收到的问题数量众多,重现器是强制性的。没有重现器的问题将无法调查,很可能会被关闭。
提供重现器
重现器的目标是提供一种重现您的 bug 的方式。没有重现器,我们将无法理解 bug,也无法修复它。
重现器应该最小化:拥有尽可能少的依赖项(理想情况下除了 react-native 之外没有其他依赖项),因为这将有助于我们更好地隔离 bug。当 GitHub 上的某人要求提供重现器时,他们不是要求您的所有源代码。
您需要创建一个最小化项目,以重现您报告的相同崩溃/bug/问题。
这个过程至关重要,因为通常在创建重现器时问题实际上就解决了。通过创建重现器,将更容易理解问题是与您的特定设置有关,还是实际上是 React Native 内部的 bug。
由于 React Native 上的流量很大,我们只能接受以下其中一种作为有效的重现器:
- 对于大多数 bug:发送一个 Pull Request,其中编辑了 RNTesterPlayground.js 以重现您的 bug。
- 如果您的 bug 与 UI 相关:一个 Snack。
- 如果您的 bug 与构建/升级相关:一个使用我们 Reproducer 模板的项目。
RNTesterPlayground.js
提供重现器的最佳方式是针对 React Native 提交一个 Pull Request,编辑 RNTesterPlayground.js 文件。
此重现器将针对 react-native 的 main 分支运行您的代码,是我们调查和修复您的 bug 的最快方式。
RNTesterPlayground.js 文件位于 RN-Tester 应用程序(我们的参考应用程序)中。您可以在其专用 README 文件中阅读更多关于其工作原理和构建方式的信息。
此类重现器的一个示例在此处:重现模态布局问题 #50704。
编辑 RNTesterPlayground.js 后,您将能够在 RNTester 的Playground选项卡中看到您的代码正在运行。

Expo Snack
对于大多数与 UI 相关的 bug,您可以使用 Expo Snack 重现它们。
使用 Expo Snack,您可以在浏览器中运行 React Native 代码,并立即看到渲染效果。
一旦您能够在 Expo Snack 中重现您的问题,点击保存按钮即可获取一个可共享的链接,将其附加到您的 issue 报告中。
重现器模板
对于大多数与构建相关的 bug,您应该使用社区重现器模板来重现它们。
此模板创建一个小项目,该项目使用 React Native Community CLI 运行,可用于展示构建问题。
该模板还附带了已设置好的 GitHub Actions CI,这将有助于发现您可能遇到的任何构建问题。
要使用此模板:
- 点击 GitHub 上的使用此模板按钮,从模板创建一个新项目。
- 在本地克隆您新创建的仓库。
- 进行修改以重现您的问题。
- 将您的仓库链接附加到您正在创建的新 bug 报告中。