1 篇文章 标记为 "release"
查看所有标签React Native 0.66 正式发布
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
今天我们正式发布 React Native v0.66 版本,提供对 Android 12 和 iOS 15 的支持,同时包含多项修复和常规更新。
重点详解
React Native 0.65 正式发布
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
今天我们发布 React Native 0.65 版本,带来了新版本的 Hermes、可访问性改进、包升级等多项更新。
Hermes 0.8 有哪些新特性?
专为 React Native 优化的开源 JavaScript 引擎 Hermes 已升级至 0.8.1 版本。本次更新的主要亮点包括:
-
全新的并发垃圾回收器 "Hades",在 64 位设备上将暂停时间缩短高达 30 倍。在 Facebook 内部测试中,某些 CPU 密集型工作负载性能提升了 20%-50%。点击此处了解 Hades 详情。
-
ECMAScript 国际化 API (ECMA-402,即
Intl) 现已内置到 Android 版 Hermes 并默认启用,每个 API 仅增加 57-62K 空间开销(相比 JSC 的 6MiB)。从此 Hermes 用户不再需要地区设置 polyfill。特别感谢 @mganandraj 和微软团队推动实现此功能! -
内存优化包括 SMI(小整数)和指针压缩技术,使 JS 堆内存缩减 30%。
-
对
Function.prototype.toString的改进修复了因不当功能检测导致的性能下降,同时支持源代码注入场景。
完整更新日志请参阅 Hermes 发布记录。
若尚未启用 Hermes,请按此步骤操作以获取新特性和性能提升!
可访问性修复与新增功能
去年 Facebook 作出 GAAD 承诺以改进 React Native 可访问性。0.65 版本兑现了该承诺并带来多项改进:
-
支持为 iOS 指定高对比度亮/暗色值,详见动态颜色文档。
-
Android 新增
getRecommendedTimeoutMillisAPI,可获取用户在无障碍设置中配置的超时值,适用于需要额外操作时间的场景。 -
多项基础修复确保 TalkBack/VoiceOver 正确播报组件状态(如
disabled禁用状态和unselected未选中状态)。
欢迎参与解决未完成的可访问性问题!
重要依赖更新与注意事项
-
需在
package.json中添加react-native-codegen版本0.0.7作为devDependency。 -
JCenter 已停止维护进入只读模式,我们已将其从 maven 仓库移除,依赖项更新至 MavenCentral 和 Jitpack。
-
已将 OkHttp 从 v3 升级至 v4.9.1。变更详情请参阅升级至 OkHttp 4。
-
升级至 Flipper 0.93 以支持 Xcode 12.5。请查阅Flipper 更新日志。
-
支持 Android Gradle Plugin 7
-
Apple Silicon 设备需要链接器变通方案。详情请参阅@mikehardy 的说明。
致谢!
此版本包含来自 61 位贡献者的 1100 多次提交。感谢所有为此版本做出贡献的开发者!您可在此处查看完整更新日志。
发布 React Native 0.64:支持 iOS 平台的 Hermes 引擎
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
今天我们正式发布 React Native 0.64 版本,此版本新增了对 iOS 平台 Hermes 引擎的支持。
iOS 平台的 Hermes 可选启用
Hermes 是一款专为 React Native 优化的开源 JavaScript 引擎。它通过降低内存占用、减小下载体积并缩短应用可用时间(即"交互就绪时间"/TTI)来提升性能。
本次发布后,您现在也可以在 iOS 开发中使用 Hermes。只需在 Podfile 中将 hermes_enabled 设为 true 并运行 pod install 即可启用。
use_react_native!(
:path => config[:reactNativePath],
# to enable hermes on iOS, change `false` to `true` and then install pods
:hermes_enabled => true
)
请注意:iOS 平台的 Hermes 支持仍处于早期阶段。我们将保持其作为可选功能,同时进行更深入的基准测试。欢迎您在自己的应用中尝试,并反馈使用效果!
默认启用内联引用 (Inline Requires)
内联引用是 Metro 的一项配置选项,通过延迟执行 JavaScript 模块直到实际使用时(而非启动时)来提升应用启动速度。
该功能作为可选配置项已存在多年,并在文档的性能章节中推荐使用。现在我们将默认启用此选项,帮助开发者无需额外配置即可获得更快的 React Native 应用启动体验。
内联引用是 Babel 的一项转换功能,将模块导入语句转换为内联形式。例如,它会把模块导入调用从文件顶部移动到实际使用位置。
转换前:
import {MyFunction} from 'my-module';
const MyComponent = props => {
const result = MyFunction();
return <Text>{result}</Text>;
};
转换后:
const MyComponent = props => {
const result = require('my-module').MyFunction();
return <Text>{result}</Text>;
};
更多关于内联引用的信息请参阅性能文档。
使用 Chrome 查看 Hermes 性能轨迹
过去一年 Facebook 赞助了 Major League Hacking 奖学金计划,支持对 React Native 的贡献。Jessie Nguyen 和 Saphal Patro 新增了在 Chrome DevTools 性能面板中可视化 Hermes 应用执行情况的功能。
详情请查看新版文档页面。
支持 Proxy 的 Hermes 引擎
我们已为 Hermes 添加 Proxy 支持,使其兼容 react-native-firebase 和 mobx 等热门社区项目。如果您正在使用这些包,现在可以将项目迁移至 Hermes。
我们计划在后续版本中将 Hermes 设为 Android 平台的默认 JavaScript 引擎,目前正在解决用户使用中的遗留问题。如果您的应用在采用 Hermes 时遇到阻碍,请在 Hermes GitHub 仓库提交 issue。
React 17 支持
React 17 没有面向开发者的新功能或重大破坏性变更。对 React Native 应用的主要影响是新的 JSX 转换,使文件无需导入 React 即可使用 JSX。
更多 React 17 信息详见 React 官方博客。
主要依赖版本变更
-
停止支持 Android API 16-20 级别。由于 Facebook 应用已停止支持用户量过低的 Android 版本,且该应用是 React Native 的主要测试平台,React Native 将同步停止支持这些版本。
-
需要 Xcode 12 和 CocoaPods 1.10
-
最低 Node 支持版本从 10 升级至 12
-
Flipper 升级至 0.75.1
致谢
衷心感谢数百位贡献者共同成就 0.64 版本!您可以在 0.64 版本变更日志 中查看本次发布的所有更新内容。
发布 React Native 0.63:默认启用 LogBox
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
今天我们发布 React Native 0.63,该版本默认启用 LogBox。
LogBox
我们常收到社区反馈,表示在 React Native 中调试错误和警告非常困难。为解决这些问题,我们全面审查了错误/警告/日志系统,并彻底重构了这套机制。

LogBox 是对 React Native 中错误提示(redbox)、警告提示(yellowbox)和日志体验的全面革新。0.62 版本中我们以可选功能引入 LogBox,本次更新则将其设为所有 React Native 应用的默认体验。
LogBox 针对错误警告信息冗长、格式混乱、缺乏操作指引等痛点,聚焦三大核心目标:
-
简洁性:日志应仅提供调试所需的最精简信息。
-
格式化:日志应结构清晰,便于快速定位关键信息。
-
可操作性:日志应提供明确指引,助您高效解决问题。
为实现这些目标,LogBox 包含以下特性:
-
日志通知:重新设计警告通知并支持错误提示,所有 console.warn 和 console.log 消息将以通知形式展示,不再遮挡应用界面。
-
代码框架:每个错误/警告都附带代码框架,直接在应用中显示日志对应源码,助您快速定位问题根源。
-
组件调用栈:组件调用栈现从错误信息中剥离,独立展示前三个关键帧,提供整洁统一的堆栈信息查看空间。
-
调用栈折叠:默认折叠与应用程序无关的底层调用栈,避免 React Native 内部代码干扰问题排查。
-
语法错误格式化:优化语法错误格式,新增带语法高亮的代码框架,助您直观识别错误来源并快速修复。
这些功能均融入全新的视觉设计,实现错误/警告样式统一,并通过直观的分页界面提供流畅的日志浏览体验。
此次变更后,我们将弃用 YellowBox 并推荐使用 LogBox API:
-
LogBox.ignoreLogs():替代YellowBox.ignoreLogs([]),通过字符串或正则表达式过滤指定日志。 -
LogBox.ignoreAllLogs():替代console.disableYellowBox,用于关闭错误/警告通知(注意:仅禁用通知功能,未捕获的错误仍会触发全屏 LogBox)。
在 0.63 版本中使用已弃用模块/方法时将收到警告提示,请务必在 0.64 版本移除这些 API 前完成调用点迁移。
有关 LogBox 及 React Native 调试的更多信息,请参阅文档。
Pressable
React Native 的构建目标在于让应用满足用户对平台的期待。这包括避免出现 "破绽"——那些暴露应用由 React Native 构建的小细节。可触摸组件一直是这类破绽的主要来源:Button、TouchableWithoutFeedback、TouchableHighlight、TouchableOpacity、TouchableNativeFeedback 和 TouchableBounce。这些组件通过提供视觉反馈使应用具有交互性,但其内置样式和效果与平台原生交互不符,用户能轻易识别出 React Native 构建的体验。
随着 React Native 的发展和对高质量应用要求的提升,这些组件未能同步进化。当前 React Native 已支持 Web、桌面和 TV 等平台,但对额外输入模式的支持依然不足。我们需要在所有平台上提供高品质的交互体验。
为解决这些问题,我们推出了名为 Pressable 的新核心组件。该组件可检测多种交互类型,其 API 设计让开发者能直接获取当前交互状态,无需在父组件中手动维护状态。同时它支持平台扩展能力(如悬停、失焦、聚焦等)。我们预期开发者将基于 Pressable 封装共享组件,而非直接使用 TouchableOpacity 等默认实现。
import {Pressable, Text} from 'react-native';
<Pressable
onPress={() => {
console.log('pressed');
}}
style={({pressed}) => ({
backgroundColor: pressed ? 'lightskyblue' : 'white',
})}>
<Text style={styles.text}>Press Me!</Text>
</Pressable>;
A simple example of a Pressable component in action
您可通过文档了解更多信息。
原生色彩支持 (PlatformColor, DynamicColorIOS)
每个原生平台都有系统定义颜色的概念。这些颜色能自动响应系统主题设置(如浅色/深色模式)、辅助功能设置(如高对比度模式),甚至应用内的上下文环境(如容器视图特性)。
虽然可通过 Appearance 或 AccessibilityInfo API 检测部分设置并调整样式,但这类抽象方案开发成本高且只能近似原生色彩效果。在混合应用中,React Native 元素与原生元素并存时,这种不一致性尤为明显。
React Native 现提供开箱即用的系统色彩解决方案。PlatformColor() 作为新 API,可像其他颜色属性一样使用。
例如,在 iOS 上,系统提供了一个名为 labelColor 的颜色,在 React Native 中可以通过 PlatformColor 这样调用:
import {Text, PlatformColor} from 'react-native';
<Text style={{color: PlatformColor('labelColor')}}>
This is a label
</Text>;
Sets the color of the Text component to labelColor as defined by iOS.
Android 则提供类似 colorButtonNormal 的色彩,调用方式如下:
import {View, Text, PlatformColor} from 'react-native';
<View
style={{
backgroundColor: PlatformColor('?attr/colorButtonNormal'),
}}>
<Text>This is colored like a button!</Text>
</View>;
Sets the background color of the View component to colorButtonNormal as defined by Android.
更多 PlatformColor 用法详见文档,也可查看 RNTester 实际代码示例。
DynamicColorIOS 是 iOS 专属 API,用于定义浅色/深色模式下的对应颜色。与 PlatformColor 类似,DynamicColorIOS 适用于所有色彩使用场景,其底层实现基于 iOS 的 colorWithDynamicProvider。
import {Text, DynamicColorIOS} from 'react-native';
const customDynamicTextColor = DynamicColorIOS({
dark: 'lightskyblue',
light: 'midnightblue',
});
<Text style={{color: customDynamicTextColor}}>
This color changes automatically based on the system theme!
</Text>;
Changes the text color based on the system theme
DynamicColorIOS 详细用法参见文档。
停止支持 iOS 9 和 Node.js 8
在 iOS 9 发布四年多后,我们将停止对其支持。此举能减少原生代码中的兼容性检查逻辑,加快开发进程。根据iOS 9 当前 1% 的市场占有率,此举对用户影响甚微。
同时,我们已停止对 Node 8 的支持。其 LTS 维护周期已于 2019 年 12 月结束。当前 LTS 版本为 Node 10,这也是我们当前支持的目标版本。如果您仍在开发 React Native 应用时使用 Node 8,我们强烈建议升级版本,以获取所有最新的安全修复和功能更新。
其他重要改进
-
支持在
<Text />中直接渲染<View />无需显式尺寸:现在您可以在任意<Text />组件内渲染<View />而无需显式设置宽高,这在之前版本中并不总是可行。在早期 React Native 版本中,此类操作会导致 RedBox 错误提示。 -
iOS 启动屏由
xib切换至storyboard:自 2020 年 4 月 30 日起,提交至 App Store 的所有应用必须使用 Xcode storyboard 提供启动屏幕,且所有 iPhone 应用必须适配全系屏幕尺寸。本次更新已调整默认 React Native 模板以满足该要求。
致谢
感谢数百位贡献者共同促成 React Native 0.63 的发布!
特别感谢 Rick Hanlon 撰写本文的 LogBox 部分,以及 Eli White 撰写 Pressable 相关内容。
完整更新日志请查看 0.63 变更记录。
React Native 0.62 发布:默认集成 Flipper
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
今天我们正式发布 React Native 0.62 版本,该版本默认集成了 Flipper 支持。
本次发布正值全球疫情期间。我们选择此刻发布是为了尊重数百位贡献者为本版本付出的努力,并避免版本与主分支差距过大。请注意当前贡献者处理问题的能力有所下降,如有必要请酌情延迟升级计划。
默认集成 Flipper
Flipper 是一款用于调试移动应用的开发者工具,在 Android 和 iOS 社区广受欢迎。本次更新中,我们为新建和现有 React Native 应用默认启用了该工具支持。

Flipper 默认提供以下功能:
-
Metro 操作:通过工具栏直接重载应用并触发开发者菜单
-
崩溃报告:查看来自 Android 和 iOS 设备的崩溃日志
-
React 开发者工具:在统一界面中使用最新版 React DevTools
-
网络检查器:查看设备应用发起的全部网络请求
-
Metro 与设备日志:查看、搜索并筛选来自 Metro 和设备的全部日志
-
原生布局检查器:查看并编辑 React Native 渲染器输出的原生布局
-
数据库与偏好设置检查器:查看并编辑设备数据库和偏好设置
此外,Flipper 作为可扩展平台,提供了从 NPM 获取插件的市场机制,您可发布或安装符合特定工作流程的自定义插件。查看可用插件列表。
更多信息请参阅 Flipper 官方文档。
全新深色模式功能
我们新增了 Appearance 模块,用于获取用户的外观偏好设置(如首选配色方案为浅色或深色模式)。
const colorScheme = Appearance.getColorScheme();
if (colorScheme === 'dark') {
// Use dark color scheme
}
同时新增了监听用户偏好设置变更的钩子函数:
import {Text, useColorScheme} from 'react-native';
const MyComponent = () => {
const colorScheme = useColorScheme();
return <Text>useColorScheme(): {colorScheme}</Text>;
};
详见 Appearance 和 useColorScheme 文档。
Apple TV 迁移至 react-native-tvos
作为精简核心计划的一部分,同时为统一 Apple TV 与 React Native Windows/macOS 等平台的支持方式,我们已开始从核心代码库移除 Apple TV 专属代码。
未来 React Native 对 Apple TV 的支持将转由 react-native-community/react-native-tvos 仓库维护,并同步提供 react-native-tvos NPM 包。这是主代码库的完整分支,仅包含支持 Apple TV 的必要修改。
react-native-tvos 的发布将基于 React Native 的公开版本。针对本次 react-native 0.62 版本的发布,请 Apple TV 项目升级至 react-native-tvos 0.62。
增强升级支持
当 0.61 版本发布时,社区推出了全新的升级助手工具,帮助开发者升级 React Native 版本。该工具可展示从当前版本到目标版本的差异对比,明确升级所需的具体修改。
即便使用此工具,升级过程中仍可能遇到问题。今天我们宣布推出升级支持中心,提供更专注的升级支持。该 GitHub issue 跟踪系统专用于处理项目升级相关问题,开发者可在此获取社区帮助。
我们始终致力于优化升级体验,希望这些工具能为尚未覆盖的特殊场景提供必要支持。
其他改进
-
LogBox:新增的错误与警告体验现作为可选功能提供,需在
index.js中添加require('react-native').unstable_enableLogBox()启用 -
React DevTools v4:升级至最新版 React DevTools,显著提升性能,优化导航体验,并完整支持 React Hooks
-
无障碍改进:包括新增 accessibilityValue、Touchables 缺失属性、
onSlidingComplete无障碍事件支持,并将 Switch 组件的默认角色由"button"改为"switch"
重大变更
-
移除 PropTypes:为减少 React Native 核心对应用体积的影响,并推荐使用编译时检查的静态类型系统,我们移除了核心组件中的
propTypes -
移除 accessibilityStates:移除已废弃的
accessibilityStates属性,改用语义更丰富的accessibilityState属性向无障碍服务描述组件状态信息 -
TextInput 变更:因使用率低、不符合 W3C 标准且在 Fabric 中实现困难,移除了 TextInput 的
onTextInput。同时移除了未文档化的inputView属性和selectionState
弃用项
-
AccessibilityInfo.fetch此前已弃用,本次更新添加了警告提示 -
现在必须显式设置
useNativeDriver以支持未来默认值切换,详见 -
Animated组件的ref现指向内部组件,已弃用getNode方法
致谢
衷心感谢数百位贡献者让 0.62 版本成为可能!
要查看所有更新内容,请查阅 0.62 更新日志。
宣布推出 React Native 0.61 并带来 Fast Refresh 功能
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
我们很高兴地宣布 React Native 0.61 版本,它包含了一种全新的重载体验——我们称之为 Fast Refresh。
Fast Refresh
当我们向 React Native 社区征询常见痛点时,最突出的反馈之一是“热重载”(hot reloading)功能存在问题。它在函数组件上工作不可靠,经常无法更新屏幕,并且对拼写错误和其他错误不够健壮。我们了解到大多数人因为它太不可靠而选择关闭。
在 React Native 0.61 中,我们将现有的“实时重载”(保存时重载)和“热重载”功能统一为全新的“Fast Refresh”特性。Fast Refresh 从零开始构建,遵循以下核心原则:
-
Fast Refresh 全面支持现代 React,包括函数组件和 Hooks
-
Fast Refresh 能优雅地从拼写错误中恢复,并在必要时回退到完整重载
-
Fast Refresh 不会执行侵入式代码转换,因此足够可靠可作为默认选项
要查看 Fast Refresh 的实际效果,请观看以下演示视频:
欢迎您亲自尝试并分享使用感受!如果不需要该功能,可以在开发者菜单中关闭(iOS 按 Cmd+D,Android 按 Cmd+M 或 Ctrl+M)。开启/关闭操作即时生效,您可以随时调整。
以下是 Fast Refresh 的使用技巧:
-
默认情况下,Fast Refresh 会保留函数组件(及 Hooks!)的本地状态
-
若需在每次编辑时重置 React 状态,可在组件文件中添加特殊注释
// @refresh reset -
Fast Refresh 总会重新挂载类组件且不保留状态,这确保了功能可靠性
-
代码出错在所难免!Fast Refresh 会在保存文件后自动重试渲染。修复语法或运行时错误后,无需手动重载应用
-
在编辑过程中添加
console.log或debugger语句是高效的调试技巧
如在 Fast Refresh 中发现任何问题,请至 GitHub 提交报告,我们将及时跟进
其他改进
-
修复了 use_frameworks! 的 CocoaPods 支持。0.60 版本默认集成 CocoaPods 的改动导致使用 use_frameworks! 的构建失败。该问题已在 0.61 修复,使 React Native 更易集成到需要动态框架的 iOS 项目中
-
新增 useWindowDimensions Hook。这个新 Hook 能自动提供并订阅屏幕尺寸更新,在多数场景下可替代 Dimensions API
-
React 升级至 16.9 版本。此版本弃用了 UNSAFE_ 生命周期方法的旧名称,优化了
act等特性。查看 React 16.9 博客文章获取自动化迁移脚本和详细信息
重大变更
- 移除 React .xcodeproj 支持。在 0.60 版本中,我们通过 CocoaPods 引入了自动链接支持。同时已将 CocoaPods 集成到端到端测试流程中,确保从此有统一标准方式将 RN 集成至 iOS 应用。这意味着 React .xcodeproj 支持已被弃用,且该文件从 0.61 起正式移除。注意:若您已使用 0.60 的自动链接功能,则不受此影响。
致谢
感谢所有为 0.61 版本做出贡献的开发者!
完整更新内容请查看 0.61 更新日志。
React Native 0.60 正式发布
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
经过数百名贡献者数月的辛勤工作,React Native 核心团队自豪地宣布发布 0.60 版本。此版本完成了 Android 和 iOS 平台的重要迁移,并修复了许多问题。这篇博客文章将介绍此次发布的亮点。不过,一如既往,更详细的信息请参考更新日志。最后,感谢贡献者帮助我们实现这一里程碑!
聚焦无障碍功能
我们对无障碍 API 进行了诸多改进,例如 announceForAccessibility,以及 角色、操作支持、标志 等方面的优化。无障碍是一门复杂的科学,但我们希望这些改进能让无障碍开发变得更轻松一些。请务必查看 2019年6月React Native开源更新 了解这些更改的更多细节。
全新的开始
React Native 的启动界面已焕然一新!感谢众多贡献者协助创建了新的用户界面。这个全新的"Hello World"将以更友好、更吸引人的方式欢迎用户加入生态系统。

AndroidX 支持
AndroidX 是 Android 生态系统向前迈出的重要一步,旧的支持库构件正在被弃用。在 0.60 版本中,React Native 已迁移至 AndroidX。这是一项重大变更,您的原生代码和依赖项也需要进行迁移。
在此变更之后,React Native 应用需要开始自行使用 AndroidX。它们不能在一个应用中并存,因此所有应用代码和依赖代码都必须使用其中之一。
虽然您需要自行迁移原生代码,但 @mikehardy、@cawfree 和 @m4tt72 开发了名为"jetifier"的智能工具来修补您的 node_modules。库维护者需要进行升级,但此工具可为您提供临时解决方案,同时给他们时间发布 AndroidX 版本。因此,如果您遇到与 AndroidX 迁移相关的错误,不妨试试这个工具。
默认使用 CocoaPods
CocoaPods 现已集成到 React Native 的 iOS 项目中。如果你尚未使用,请确保从现在开始使用 xcworkspace 文件打开 iOS 平台代码(小技巧:可在项目根目录尝试 xed ios 命令)。同时,内部包的 podspec 配置已更新以确保与 Xcode 项目兼容,这将有助于故障排查和调试。在升级到 0.60 版本时,你需要对 Podfile 进行一些简单修改来启用这项重要功能。请注意,我们已知晓与 use_frameworks! 的兼容性问题,正在通过此工单追踪临时解决方案和后续补丁。
精简核心模块移除
WebView 和 NetInfo 此前已被提取到独立代码库,在 0.60 版本中我们已完成将其移出 React Native 主仓库的工作。此外,为响应社区关于新 App Store 政策的反馈,Geolocation 模块也已被提取。若你尚未迁移,请添加 react-native-webview、@react-native-community/netinfo 和 @react-native-community/geolocation 依赖项完成迁移。如需自动化解决方案,可考虑使用 rn-upgrade-deprecated-modules。维护者们在模块提取后已向这些仓库提交了 100 多次提交,我们对社区的大力支持感到欣喜!
原生模块自动链接
React Native CLI 团队推出了名为自动链接的重大改进!多数场景下不再需要手动执行 react-native link 命令。同时团队全面重构了链接流程,请根据上述文档使用 react-native unlink 移除现有依赖。
升级助手
@lucasbento、@pvinis、@kelset 和 @watadarkstar 开发了强大的 Upgrade Helper 工具来简化升级流程。它帮助具有遗留应用或复杂定制需求的 React Native 用户清晰查看版本间的变更差异。请查阅更新后的升级文档,立即体验你的专属升级路径!

致库维护者
AndroidX 的变更几乎必然要求更新你的库,请尽快添加支持。若暂时无法升级,建议使用 jetifier 工具测试你的库,确保用户能在构建时成功打补丁。
请查阅自动链接文档更新配置和说明文档。根据库的原有集成方式,你可能还需进行额外调整。参考 CLI 的依赖管理指南了解如何定义依赖接口。
致谢
虽然我们重点介绍了这些亮点,但仍有更多令人振奋的改进。要查看所有更新内容,请参阅完整的变更日志。请持续关注后续消息,尽情享受 0.60 版本吧!
发布 React Native 0.59
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
欢迎使用 React Native 0.59 版本!本次重大更新包含 88 位贡献者提交的 644 个 commit。贡献不仅限于代码提交,因此我们要特别_感谢_所有维护 issue、建设社区和传播 React Native 知识的朋友们。本月带来了多项期待已久的功能更新,希望你们喜欢。
🎣 Hooks 正式到来
React Hooks 已在此版本中正式支持,它让你能够在组件间复用状态逻辑。关于 Hooks 的讨论热度很高,如果你还不了解,不妨看看以下优质资源:
- Introducing Hooks 阐述了我们为何将 Hooks 引入 React
- Hooks at a Glance 快速概览内置 Hooks
- Building Your Own Hooks 演示如何通过自定义 Hooks 实现代码复用
- Making Sense of React Hooks 探索 Hooks 带来的全新可能性
- useHooks.com 展示社区维护的 Hooks 实践方案与示例
强烈建议你在应用中尝试此特性,希望你能和我们一样感受到逻辑复用的魅力。
📱 JSC 更新带来 Android 性能提升与 64 位支持
React Native 使用 JSC(JavaScriptCore)作为应用的 JavaScript 引擎。此前 Android 平台的 JSC 版本较旧,导致许多现代 JavaScript 特性无法支持,其性能也远逊于 iOS 的现代 JSC 引擎。这个版本彻底改变了这一现状。
感谢 @DanielZlotin、@dulmandakh、@gengjiawen、@kmagiera 和 @kudo 的卓越工作,JSC 现已追平近几年的发展进度。本次更新带来了 64 位支持、现代 JavaScript 特性支持以及显著的性能提升。特别感谢他们建立了可维护的升级流程,让我们未来能够更轻松地获取 WebKit 改进成果,同时感谢 Software Mansion 和 Expo 对此工作的支持。
💨 内联引用加速应用启动
我们致力于帮助开发者默认获得高性能的 React Native 应用,正努力将 Facebook 的优化方案引入社区。通过按需加载资源而非拖慢启动速度,这项称为 "inline requires"(内联引用)的特性让 Metro 能够识别需要懒加载的组件。具有深层复杂组件结构的应用将获得最显著的性能提升。

在默认启用此功能前,我们需要社区验证其实际效果。升级至 0.59 后,你会看到新的 metro.config.js 文件,只需将对应选项设为 true 并提交你的反馈!更多关于内联引用的内容可参阅性能文档,用于评估你的应用性能。
🚅 核心精简计划启动
React Native 是一个庞大而复杂的项目,其仓库结构也很复杂。这使得代码库对贡献者不够友好,测试困难,并且作为开发依赖显得臃肿。Lean Core 是我们为解决这些问题所做的努力,通过将代码迁移到独立的库中以实现更好的管理。在过去的几个版本中,我们已经迈出了第一步,但现在我们要认真对待了。
您可能会注意到,一些额外的组件现在已被正式弃用。这是个好消息,因为现在有维护者正在积极维护这些功能。请注意警告信息,并将这些功能迁移到新的库中,因为它们将在未来的版本中被移除。下表列出了组件、其状态以及您可以迁移到的位置。
| Component | Deprecated? | New home |
|---|---|---|
| AsyncStorage | 0.59 | @react-native-community/react-native-async-storage |
| ImageStore | 0.59 | expo-file-system or react-native-fs |
| MaskedViewIOS | 0.59 | @react-native-community/react-native-masked-view |
| NetInfo | 0.59 | @react-native-community/react-native-netinfo |
| Slider | 0.59 | @react-native-community/react-native-slider |
| ViewPagerAndroid | 0.59 | @react-native-community/react-native-viewpager |
在接下来的几个月中,将会有更多的组件遵循这条路径,以实现更精简的核心。我们正在寻求帮助 — 请前往 lean core umbrella 参与贡献。
👩🏽💻 CLI 改进
React Native 的命令行工具是开发者进入生态系统的入口,但它们长期以来存在问题且缺乏官方支持。CLI 工具已被迁移到一个新仓库,并且一个专门的维护者小组已经做出了一些令人兴奋的改进。
日志的格式化现在更好了。命令现在几乎可以即时运行 — 您会立即注意到不同:


🚀 升级到 0.59
我们听到了您关于 React Native 升级流程的反馈,并且正在采取措施在未来的版本中改进体验。要升级到 0.59,我们建议使用 rn-diff-purge 来比较您当前使用的 React Native 版本与 0.59 之间的差异,然后手动应用这些更改。一旦您将项目升级到 0.59,您将能够使用新改进的 react-native upgrade 命令(基于 rn-diff-purge!)升级到 0.60 及更高版本,因为新的版本将陆续发布。
🔨 重大变更
0.59 中的 Android 支持已根据 Google 的最新建议进行了清理,这可能会导致现有应用出现故障。这个问题可能表现为运行时崩溃,并显示消息"You need to use a Theme.AppCompat theme (or descendant) with this activity"。我们建议更新您项目的 AndroidManifest.xml 文件,确保 android:theme 的值是一个 AppCompat 主题(例如 @style/Theme.AppCompat.Light.NoActionBar)。
react-native-git-upgrade 命令已在 0.59 中被移除,取而代之的是新改进的 react-native upgrade 命令。
🤗 致谢
许多新的贡献者帮助实现了从 Flow 类型生成原生代码并解决了 Xcode 警告 - 这些都是了解 React Native 如何工作并为社区做贡献的好方法。谢谢!请关注未来类似的议题。
尽管我们只提到了部分亮点,但还有更多令人兴奋的更新值得期待。要查看所有更新,请参阅更新日志。0.59 是一个重大版本——我们迫不及待想让大家尝试一下。
在接下来的时间里,我们还将带来更多改进。敬请期待!
发布 0.56 版本
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
期待已久的 React Native 0.56 版本现已发布 🎉。本篇博客将重点介绍此版本中的部分变更内容。我们同时借此机会说明自三月份以来团队的工作重点。
重大变更的困境,或者说,"何时发布?"
贡献者指南详细说明了所有 React Native 变更所需经历的集成流程。该项目由众多不同的工具构成,需要持续协调与支持才能确保所有环节正常运行。再加上为项目积极贡献的活跃开源社区,您就能感受到整个工程令人难以置信的规模。
鉴于 React Native 的广泛采用,重大变更必须极其谨慎地实施,而实际流程并不如预期顺利。核心团队决定跳过四月和五月的版本发布,以便集中精力集成和测试一系列重大变更。我们全程使用专门的社区沟通渠道,确保 2018 年 6 月发布的 0.56.0 版本能尽可能顺利地被耐心等待稳定版的开发者采用。
0.56.0 完美吗?不完美,就像所有软件一样:但我们在"等待更高稳定性"与"测试已取得积极成果可以推进"之间找到了平衡点,因此决定正式发布。此外,我们已知悉最终 0.56.0 版本中仍存在若干待解决问题。大多数开发者升级到 0.56.0 应该不会遇到问题。若您因上述问题受阻,我们期待在讨论区见到您的参与,并希望与您共同寻找解决方案。
您可将 0.56.0 视为构建更稳定框架的重要基石:可能需要一至两周的广泛采用才能解决所有边缘情况,但这将为 2018 年 7 月的 0.57.0 版本奠定更坚实的基础。
在本章节结尾,我们要特别感谢所有 67 位贡献者完成的 818 次提交 (!),这些工作将帮助您的应用更臻完善 👏。
那么,闲话少说...
重大变更
Babel 7
众所周知,让我们能够使用 JavaScript 最新强大功能的转译工具 Babel 即将升级到 v7 版本。由于新版本带来诸多重要改进,我们认为当前正是升级良机,这将使 Metro 能够充分利用其优化特性。
若您在升级过程中遇到问题,请参阅相关文档章节。
Android 支持的现代化
在 Android 方面,我们更新了大量周边工具链。现已升级至 Gradle 3.5、Android SDK 26、Fresco 1.9.0 和 OkHttp 3.10.0,甚至将 NDK API 目标版本提升至 API 16。这些变更应能平稳过渡并带来更快的构建速度。更重要的是,这将帮助开发者满足下月生效的 Google Play 商店新要求。
我们要特别感谢 Dulmandakh 为此提交的多项 PR,正是这些贡献让此次升级成为可能 👏。
这方面仍需更多改进措施,您可通过专门议题(以及关于 JSC 的单独议题)参与未来 Android 支持更新的规划讨论。
全新的 Node、Xcode、React 和 Flow
Node 8 现已成为 React Native 的标准配置。其实此前已在测试中推进,但随着 Node 6 进入维护模式,我们全面转向了 Node 8。React 也同步更新至 16.4 版本,带来了大量修复更新。
我们将停止支持 iOS 8,iOS 9 成为可支持的最低版本。所有能运行 iOS 8 的设备均可升级至 iOS 9,因此这不会造成实质影响。此项变更让我们移除了专为 iOS 8 老旧设备设计的兼容代码。
持续集成工具链已更新至 Xcode 9.4,确保所有 iOS 测试都在 Apple 提供的最新开发者工具环境中运行。
我们升级至 Flow 0.75 以采用广受开发者好评的新错误格式。同时为更多组件添加了类型定义。若您尚未在项目中实施静态类型检查,建议尝试使用 Flow 在编码时而非运行时发现问题。
以及更多改进...
例如,YellowBox 被全新实现方案取代,显著提升了调试体验。
完整发布说明请查阅此处变更日志。升级前请务必参考升级指南以避免版本迁移问题。
最后提醒:从本周开始,React Native 核心团队将恢复举行月度会议。我们将确保及时同步会议讨论内容,并将您的反馈纳入未来会议考量。
祝大家编码愉快!
Lorenzo、Ryan 及全体 React Native 核心团队成员
附注: 我们再次提醒大家,由于 React Native 仍处于快速迭代阶段(0.x 版本),升级时可能会遇到崩溃或功能异常。请在 issue 讨论和提交 PR 时保持友善互助,并始终遵守我们推行的 CoC 行为准则——请记住,屏幕对面永远是一个真实的人。

