跳至主内容

1 篇文章 标记为 "release"

查看所有标签

React Native 0.68 正式发布

· 1 分钟阅读
Lorenzo Sciandra
Lorenzo Sciandra
Senior Software Engineer @ Microsoft
Andrei Shikov
Andrei Shikov
Software Engineer @ Meta
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

大家好!今天我们正式发布 React Native 0.68.0 版本,包含全新架构的体验版入口、多项错误修复及其他改进。

目录​

React Native 0.67 正式发布

· 1 分钟阅读
Lorenzo Sciandra
Lorenzo Sciandra
Senior Software Engineer @ Microsoft
Luna Wei
Luna Wei
Software Engineer @ Meta
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

各位开发者新年好!今天我们正式发布 React Native 最新版本 0.67.0,同时向大家介绍过去几个月我们对发布流程所做的改进。

目录​

React Native 0.66 正式发布

· 1 分钟阅读
Luna Wei
Luna Wei
Software Engineer @ Meta
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

今天我们正式发布 React Native v0.66 版本,提供对 Android 12 和 iOS 15 的支持,同时包含多项修复和常规更新。

重点详解​

React Native 0.65 正式发布

· 1 分钟阅读
Luna Wei
Luna Wei
Software Engineer @ Meta
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

今天我们发布 React Native 0.65 版本,带来了新版本的 Hermes、可访问性改进、包升级等多项更新。

Hermes 0.8 有哪些新特性?​

专为 React Native 优化的开源 JavaScript 引擎 Hermes 已升级至 0.8.1 版本。本次更新的主要亮点包括:

完整更新日志请参阅 Hermes 发布记录。

若尚未启用 Hermes,请按此步骤操作以获取新特性和性能提升!

可访问性修复与新增功能​

去年 Facebook 作出 GAAD 承诺以改进 React Native 可访问性。0.65 版本兑现了该承诺并带来多项改进:

  • 支持为 iOS 指定高对比度亮/暗色值,详见动态颜色文档。

  • Android 新增 getRecommendedTimeoutMillis API,可获取用户在无障碍设置中配置的超时值,适用于需要额外操作时间的场景。

  • 多项基础修复确保 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 引擎

· 1 分钟阅读
Mike Grabowski
Mike Grabowski
CTO and Co-Founder @ Callstack
非官方测试版翻译

本页面由 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

· 1 分钟阅读
Mike Grabowski
Mike Grabowski
CTO and Co-Founder @ Callstack
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

今天我们发布 React Native 0.63,该版本默认启用 LogBox。

LogBox​

我们常收到社区反馈,表示在 React Native 中调试错误和警告非常困难。为解决这些问题,我们全面审查了错误/警告/日志系统,并彻底重构了这套机制。

LogBox 截图

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

· 1 分钟阅读
Rick Hanlon
Facebook React Native 核心成员
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

今天我们正式发布 React Native 0.62 版本,该版本默认集成了 Flipper 支持。

本次发布正值全球疫情期间。我们选择此刻发布是为了尊重数百位贡献者为本版本付出的努力,并避免版本与主分支差距过大。请注意当前贡献者处理问题的能力有所下降,如有必要请酌情延迟升级计划。

默认集成 Flipper​

Flipper 是一款用于调试移动应用的开发者工具,在 Android 和 iOS 社区广受欢迎。本次更新中,我们为新建和现有 React Native 应用默认启用了该工具支持。

React Native 的 Flipper 界面截图

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 功能

· 1 分钟阅读
Dan Abramov
Facebook React 核心团队
非官方测试版翻译

本页面由 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 正式发布

· 1 分钟阅读
Ryan Turner
核心维护者 & React Native 开发者
非官方测试版翻译

本页面由 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。它们不能在一个应用中并存,因此所有应用代码和依赖代码都必须使用其中之一。

matt-oakes 发表于 discussions-and-proposals

虽然您需要自行迁移原生代码,但 @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 用户清晰查看版本间的变更差异。请查阅更新后的升级文档,立即体验你的专属升级路径!

升级助手清晰展示迁移到不同 React Native 版本所需的更改

致库维护者​

AndroidX 的变更几乎必然要求更新你的库,请尽快添加支持。若暂时无法升级,建议使用 jetifier 工具测试你的库,确保用户能在构建时成功打补丁。

请查阅自动链接文档更新配置和说明文档。根据库的原有集成方式,你可能还需进行额外调整。参考 CLI 的依赖管理指南了解如何定义依赖接口。

致谢​

虽然我们重点介绍了这些亮点,但仍有更多令人振奋的改进。要查看所有更新内容,请参阅完整的变更日志。请持续关注后续消息,尽情享受 0.60 版本吧!

发布 React Native 0.59

· 1 分钟阅读
Ryan Turner
核心维护者 & React Native 开发者
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

欢迎使用 React Native 0.59 版本!本次重大更新包含 88 位贡献者提交的 644 个 commit。贡献不仅限于代码提交,因此我们要特别_感谢_所有维护 issue、建设社区和传播 React Native 知识的朋友们。本月带来了多项期待已久的功能更新,希望你们喜欢。

🎣 Hooks 正式到来​

React Hooks 已在此版本中正式支持,它让你能够在组件间复用状态逻辑。关于 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 文件的源码,展示如何启用 inlineRequires

在默认启用此功能前,我们需要社区验证其实际效果。升级至 0.59 后,你会看到新的 metro.config.js 文件,只需将对应选项设为 true 并提交你的反馈!更多关于内联引用的内容可参阅性能文档,用于评估你的应用性能。

🚅 核心精简计划启动​

React Native 是一个庞大而复杂的项目,其仓库结构也很复杂。这使得代码库对贡献者不够友好,测试困难,并且作为开发依赖显得臃肿。Lean Core 是我们为解决这些问题所做的努力,通过将代码迁移到独立的库中以实现更好的管理。在过去的几个版本中,我们已经迈出了第一步,但现在我们要认真对待了。

您可能会注意到,一些额外的组件现在已被正式弃用。这是个好消息,因为现在有维护者正在积极维护这些功能。请注意警告信息,并将这些功能迁移到新的库中,因为它们将在未来的版本中被移除。下表列出了组件、其状态以及您可以迁移到的位置。

在接下来的几个月中,将会有更多的组件遵循这条路径,以实现更精简的核心。我们正在寻求帮助 — 请前往 lean core umbrella 参与贡献。

👩🏽‍💻 CLI 改进​

React Native 的命令行工具是开发者进入生态系统的入口,但它们长期以来存在问题且缺乏官方支持。CLI 工具已被迁移到一个新仓库,并且一个专门的维护者小组已经做出了一些令人兴奋的改进。

日志的格式化现在更好了。命令现在几乎可以即时运行 — 您会立即注意到不同:

0.58 的 CLI 启动很慢0.59 的 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 是一个重大版本——我们迫不及待想让大家尝试一下。

在接下来的时间里,我们还将带来更多改进。敬请期待!

Ryan 及整个 React Native 核心团队