React Native 0.80 - React 19.1、JS API 变更、冻结旧架构等多项更新
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
今天我们激动地宣布 React Native 0.80 正式发布!
本次更新将 React Native 内置的 React 版本升级至最新的稳定版:19.1.0。
我们还为 JavaScript API 带来了一系列稳定性改进:深度导入现在会触发警告,同时我们推出了全新的可选严格 TypeScript API,提供更精准安全的类型定义。
此外,React Native 的旧架构现已正式冻结,您将开始看到相关 API 的警告提示,这些 API 将在旧架构完全弃用后停止工作。
重点更新
重点详解
JavaScript 深度导入弃用说明
本次更新中,我们正着力优化并稳定 React Native 的公共 JavaScript API。首要举措是明确界定哪些 API 可供应用和框架导入。为此,我们正式弃用 React Native 的深度导入(参见 RFC),并通过 ESLint 和 JS 控制台引入警告机制。
这些警告仅针对项目源代码中的导入操作,您可以选择关闭警告提示。但请注意,我们计划在后续版本中彻底移除深度导入功能,建议您尽快改用根目录导入方式。
// Before - import from subpath
import {Alert} from 'react-native/Libraries/Alert/Alert';
// After - import from `react-native`
import {Alert} from 'react-native';
部分 API 未在根目录导出,未来将无法通过深度导入访问。这是有意为之的设计,旨在缩减 React Native API 的整体暴露范围。我们开设了专门的反馈讨论区收集用户问题,并将与社区共同敲定最终导出的 API 清单(至少涵盖未来两个 React Native 版本周期)。期待您的宝贵意见!
您可以在我们的专题文章中了解更多关于此更改的信息:迈向稳定的 JavaScript API。
可选严格 TypeScript API
伴随上述公共 API 导出方式的重构,我们在 0.80 版本中还为 react-native 包推出了一套全新的 TypeScript 类型定义,称为严格 TypeScript API。
启用严格 TypeScript API 可预览 React Native 未来稳定的 JavaScript API。这些新类型具备以下特性:
-
直接由源代码生成 - 提升覆盖范围与准确性,为您提供更强的兼容性保障。
-
严格限定于 React Native 索引文件 - 更精确定义公共 API 边界,确保内部文件变更不会破坏 API 兼容性。
我们将其与现有类型一同发布,这意味着您可以在准备就绪时选择迁移。此外,如果您使用的是标准 React Native API,大多数应用无需任何更改即可通过验证。我们强烈建议早期采用者和新创建的应用通过修改 tsconfig.json 文件来启用此功能。
当社区准备就绪后,Strict TypeScript API 将成为我们未来的默认 API——其启用时间将与深度导入的移除保持同步。
您可以在我们的专题文章中了解更多关于此更改的信息:迈向稳定的 JavaScript API。
旧架构冻结与警告
自 0.76 版本起,React Native 的新架构已成为默认选择,我们已见证多个项目与工具从中获得显著收益的成功案例。
我们近期宣布将旧架构正式视为冻结状态。我们将不再为旧架构开发新的错误修复或功能,并在版本发布流程中停止对旧架构的测试。
为保障迁移平稳性,若您在新架构中遇到错误或功能回退问题,仍可选择暂时禁用新架构。
但同时在 React Native 中维护两种架构存在巨大挑战,这会影响运行时性能、应用体积以及代码库的维护成本。
因此我们最终将在未来某个时间点彻底淘汰旧架构。
在 0.80 版本中,我们新增了一系列警告机制——当您使用新架构不兼容的 API 时,这些警告将在 React Native DevTools 中显示。
建议您不要忽略这些警告,并考虑将应用和库迁移至新架构,为未来做好准备。

您可以通过我们在 App.js 大会的演讲《后旧架构时代:新架构的未来》深入了解这些变更。
React 19.1.0
此版本 React Native 搭载了最新的 React 稳定版:19.1.0
您可在 React 发布说明 中查阅该版本的所有新特性与错误修复。
React 19.1.0 的重要特性是所有者堆栈(owner stacks)的实现与优化。这项开发环境专用功能可帮助您精确定位引发错误的组件。
但请注意:若您使用 @babel/plugin-transform-function-name Babel 插件(React Native Babel 预设默认启用),所有者堆栈在 React Native 中可能无法正常工作。我们将在后续 React Native 版本中修复此问题。
实验性功能 - React Native iOS 依赖项预构建
如果您开发过 React Native iOS 应用,可能注意到首次原生构建耗时较长:在老旧机器上可能需要数分钟甚至更久。这是因为需要完整编译 React Native iOS 代码及其所有依赖项。
过去几周,我们正尝试为 iOS 预构建部分 React Native 核心代码(类似 Android 方案),以缩短首次运行 React Native 应用的构建时间。
React Native 0.80 是首个支持将部分 iOS 依赖项作为预构建内容发布的版本,这将有效减少构建时间。
在 React Native 的发布流程中,我们构建了一个名为 ReactNativeDependencies.xcframework 的 XCFramework,它预编译了 React Native 所依赖的所有第三方库。
我们实验并测试了这个 iOS 预编译方案能节省多少时间。在 M4 芯片设备上的基准测试中,使用预编译构建比源码构建速度提升了约 12%。
根据经验,我们发现许多用户提交的 bug 报告都与 React Native 的第三方依赖构建问题有关(例如 #39568)。 预编译第三方依赖让我们提前为您完成这些库的构建,从而彻底避免这类构建问题。
请注意:我们并非预编译整个 React Native,仅预编译 Meta 未直接控制的库(如 Folly 和 GLog)。
在未来的版本中,我们还将预编译 React Native 核心框架的其他部分。
如何使用
该功能仍处于实验阶段,默认未启用。
如需启用,可在安装 Pod 时添加 RCT_USE_RN_DEP 环境变量:
RCT_USE_RN_DEP=1 bundle exec pod install
若需为所有开发成员启用,可修改 Podfile 文件:
if linkage != nil
Pod::UI.puts "Configuring Pod with #{linkage}ally linked Frameworks".green
use_frameworks! :linkage => linkage.to_sym
end
+ENV['RCT_USE_RN_DEP'] = '1'
target 'HelloWorld' do
config = use_native_modules!
遇到任何预编译相关问题,请在此讨论区反馈。我们将全力排查,确保预编译方案对您的应用透明无感。
其他变更
Android - IPO 优化减小 APK 体积
此版本显著减小了所有基于 React Native 构建的 Android 应用体积。从 0.80 开始,我们为 React Native 和 Hermes 构建启用了过程间优化。
此项优化使所有 Android 应用的安装包体积减小约 1MB。

只需将 React Native 升级至 0.80 版本,无需额外修改即可获得此优化收益。
新应用启动页重设计
若您未使用 Expo 但采用社区 CLI 和模板,此版本已将新应用启动页迁移至独立包并进行了视觉焕新。这减少了使用社区模板创建新应用时的初始样板代码,同时在大屏设备上提供更佳体验。

关于 JSC 社区支持的说明
React Native 0.80 是最后一个提供官方 JSC 支持的版本。后续 JSC 支持将通过社区维护的 @react-native-community/javascriptcore 包提供。
若您此前未关注相关公告,可在此处查看详情
重大变更
主包新增 "exports" 字段
作为 JS 稳定 API 改进的一部分,我们在 react-native 的 package.json 中引入了 "exports" 字段。
在 0.80 版本中,此映射默认仍会暴露所有 JavaScript 子路径,因此不会造成重大破坏性变更。同时,这可能会微妙影响 react-native 包内模块的解析方式:
-
在 Metro 环境下,平台特定扩展将不再针对
"exports"匹配项自动展开。我们已提供多个垫片模块来解决此问题(#50426)。 -
在 Jest 环境下,模拟深层导入的功能可能发生变化,可能需要更新测试用例。
其他破坏性变更
以下列出可能对产品代码产生轻微影响的其他破坏性变更,值得注意:
JavaScript 相关
- 我们将
eslint-plugin-react-hooks从 v4.6.0 升级至 v5.2.0(完整变更日志见此)。react-hooks的 lint 规则可能产生新的错误提示,需要修复或忽略
Android 相关
-
本次发布将 React Native 内置的 Kotlin 版本升级至 2.1.20。Kotlin 2.1 引入了预览版语言特性,可用于模块/组件开发。详见官方发布说明。
-
我们移除了
StandardCharsets类(自 0.73 起已弃用)。请改用java.nio.charset.StandardCharsets类。 -
我们将多个类标记为内部类(非公开 API,禁止访问)。已通知受影响库或提交补丁:
com.facebook.react.fabric.StateWrapperImplcom.facebook.react.modules.core.ChoreographerCompatcom.facebook.react.modules.common.ModuleDataCleaner
-
多个类从 Java 迁移至 Kotlin。如使用这些类,需调整参数的可空性和类型:
com.facebook.react.devsupport包下所有类com.facebook.react.bridge.ColorPropConvertercom.facebook.react.views.textinput.ReactEditTextcom.facebook.react.views.textinput.ReactTextInputManager
iOS 相关
- 从 RCTUtils.h 中移除
RCTFloorPixelValue字段 -RCTFloorPixelValue方法在 React Native 中未使用,现已完全删除。
更多小型破坏性变更详见 0.80 版变更日志。
致谢
React Native 0.80 包含来自 127 位贡献者的 1167 次提交。感谢所有人的辛勤付出!
特别鸣谢在本版本中做出重大贡献的社区成员:
-
Christian Falch 负责 React Native iOS 依赖的预构建工作
-
Iwo Plaza、Jakub Piasecki 和 Dawid Małecki 共同完成严格 TypeScript API 的开发
同时感谢为本版本说明文档撰文的作者:
-
Riccardo Cipolleschi 编写 React Native iOS 依赖预构建相关内容
-
Alex Hunt 负责深层导入弃用、严格 TypeScript API 及新应用屏幕重设计部分
-
感谢 Nicola Corti 在旧架构冻结和警告方面的工作。
升级到 0.80 版本
对于现有项目,除了升级文档外,请使用 React Native Upgrade Helper 查看 React Native 各版本间的代码变更。
要创建新项目:
如果您使用 Expo,React Native 0.80 将在 Expo SDK 的 canary 版本中获得支持。关于如何在 Expo 中使用 React Native 0.80 的说明可参阅这篇专门的博客文章。
0.80 现已成为 React Native 的最新稳定版本,0.77.x 版本将不再受支持。更多信息请参阅 React Native 的支持政策。我们计划在近期发布 0.77 的最终终止支持更新。


