跳到主要内容

19 篇带有“release”标签的文章

查看所有标签

宣布 React Native 0.65

·3 分钟阅读
Luna Wei
Luna Wei
Meta 软件工程师

今天我们发布了 React Native 0.65 版本,其中包含新版本的 Hermes、辅助功能改进、软件包升级等。

Hermes 0.8 中的新功能?

Hermes,Facebook 为 React Native 优化的开源 JavaScript VM,已升级到 0.8.1 版本。此版本中的一些突出功能包括

您可以在此处找到完整的 Hermes 更改日志

按照此处的步骤,如果您尚未选择将您的应用程序加入 Hermes,以利用这些新功能和收益!

辅助功能修复和新增功能

去年,Facebook 承诺 GAAD 以改进 React Native 中的辅助功能。0.65 分享了此承诺的结果和其他辅助功能方面的胜利!一些值得注意的更改包括

  • 允许为 iOS 指定高对比度亮暗值。有关更多详细信息,请参阅文档
  • 在 Android 上添加了 getRecommendedTimeoutMillis API。这公开了用户在 Android 辅助功能选项中设置的首选默认超时值,适用于可能需要更多时间来查看或访问控件等的用户。
  • 通用修复,以确保 TalkBack/VoiceOver 正确宣布 UI 状态,例如组件上的 disabledunselected

您可以在此处关注或贡献我们的未解决的辅助功能问题

值得注意的依赖项版本更新和注意事项

  • 现在需要在 package.json 中将 react-native-codegen 版本 0.0.7 作为 devDependency
  • JCenter 已停止使用且现在为只读。我们已删除 JCenter 作为 Maven 存储库,并更新了依赖项以使用 MavenCentral 和 Jitpack。
  • 将 OkHttp 从 v3 升级到 v4.9.1。有关更改的更多详细信息,请参阅升级到 OkHttp 4
  • 升级到 Flipper 0.93 以支持 Xcode 12.5。有关 Flipper 更改日志,请参阅此处
  • Android Gradle 插件 7 支持
  • Apple Silicon 需要链接器解决方法。有关此信息,请参阅 @mikehardy 的说明

谢谢!

此版本包含来自 61 位贡献者的超过 1100 次提交。感谢每位为此版本做出贡献和支持的人!您可以在此处找到完整的更改日志

宣布 React Native 0.64,iOS 版 Hermes

·4 分钟阅读
Mike Grabowski
Mike Grabowski
Callstack 首席技术官兼联合创始人

今天我们发布了 React Native 0.64,它附带了对 iOS 版 Hermes 的支持。

iOS 版 Hermes 选择加入

Hermes 是一个为运行 React Native 而优化的开源 JavaScript 引擎。它通过减少内存利用率、减小下载大小并缩短应用程序变得可用或“可交互时间”(TTI)的时间来提高性能。

在此版本中,我们很高兴地宣布,您现在也可以使用 Hermes 在 iOS 上进行构建。要在 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 支持仍处于早期阶段。我们将其保留为选择加入,因为我们正在进行进一步的基准测试。我们鼓励您在自己的应用程序上试用,并告知我们它的运行情况!

默认启用内联 require

内联 require 是 Metro 配置选项,它通过延迟 JavaScript 模块的执行直到它们被使用时才执行,而不是在启动时执行,从而缩短了启动时间。

此功能已经存在并被推荐作为可选配置选项存在几年了,列在我们文档的性能部分中。我们现在默认对新应用程序启用此选项,以帮助人们无需额外配置即可拥有快速的 React Native 应用程序。

内联 require 是一个 Babel 转换,它获取模块导入并将其转换为内联。例如,内联 require 将此模块导入调用从文件顶部转换为它被使用的地方。

之前

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>;
};

有关内联 require 的更多信息,请参见性能文档

使用 Chrome 查看 Hermes 跟踪

在过去的一年中,Facebook 赞助了 Major League Hacking fellowship,支持对 React Native 的贡献。Jessie NguyenSaphal Patro 添加了使用 Chrome DevTools 上的 Performance 选项卡来可视化您的应用程序在使用 Hermes 时的执行情况的功能。

有关更多信息,请查看新的文档页面

支持代理的 Hermes

我们已向 Hermes 添加了代理支持,从而实现了与流行的社区项目(如 react-native-firebase 和 mobx)的兼容性。如果您一直在使用这些软件包,您现在可以迁移到 Hermes 以用于您的项目。

我们计划在即将发布的版本中使 Hermes 成为 Android 的默认 JavaScript 引擎,因此我们正在努力解决人们在使用 Hermes 时遇到的剩余问题。如果还有其他问题阻碍您的应用程序采用 Hermes,请在 Hermes GitHub 存储库上打开一个问题。

React 17

React 17 不包含面向开发人员的新功能或重大突破性更改。对于 React Native 应用程序,主要更改是新的 JSX 转换,使文件不再需要导入 React 即可使用 JSX。

有关 React 17 的更多信息,请参见 React 博客

主要依赖项版本更改

  • 放弃了 Android API 级别 16-20。Facebook 应用程序始终放弃对使用率足够低的 Android 版本的支持。由于 Facebook 应用程序不再支持这些版本,并且是 React Native 的主要测试表面,因此 React Native 也放弃了支持。
  • 需要 Xcode 12 和 CocoaPods 1.10
  • 最低 Node 支持从 10 提升到 Node 12
  • Flipper 提升到 0.75.1

感谢

感谢数百位促成 0.64 版本的贡献者!0.64 更改日志 包含此版本中包含的所有更改。

宣布 React Native 0.63,LogBox

·8 分钟阅读
Mike Grabowski
Mike Grabowski
Callstack 首席技术官兼联合创始人

今天我们发布了 React Native 0.63,它默认启用了 LogBox。

LogBox

我们经常收到社区的反馈,指出在 React Native 中调试错误和警告很困难。为了解决这些问题,我们查看了 React Native 中的整个错误、警告和日志系统,并从头开始重新设计了它。

Screenshot of LogBox

LogBox 是 React Native 中完全重新设计的 redbox、yellowbox 和日志记录体验。在 0.62 中,我们引入了 LogBox 作为选择加入项。在此版本中,我们将 LogBox 作为所有 React Native 中的默认体验推出。

LogBox 通过关注三个主要目标,解决了错误和警告过于冗长、格式不佳或不可操作的抱怨

  • 简洁:日志应提供调试问题所需的最小信息量。
  • 格式化:日志应格式化,以便您可以快速找到所需的信息。
  • 可操作:日志应可操作,以便您可以修复问题并继续前进。

为了实现这些目标,LogBox 包括

  • 日志通知:我们重新设计了警告通知,并添加了对错误的支持,以便所有 console.warn 和 console.log 消息都显示为通知,而不是覆盖您的应用程序。
  • 代码框架:每个错误和警告现在都包含一个代码框架,该框架显示应用程序内部日志的源代码,使您可以快速识别问题的根源。
  • 组件堆栈:所有组件堆栈现在都从错误消息中剥离出来,并放入它们自己的部分,其中顶部三个框架可见。这为您提供了一个统一的、一致的空间来期望堆栈框架信息,而不会使日志消息混乱。
  • 堆栈框架折叠:默认情况下,我们现在折叠与您的应用程序代码无关的调用堆栈框架,以便您可以快速查看应用程序中的问题,而无需筛选 React Native 内部结构。
  • 语法错误格式化:我们改进了语法错误的格式化,并添加了带有语法突出显示的代码框架,以便您可以查看错误的根源、修复它并继续编码,而不会受到 React Native 的阻碍。

我们将所有这些功能都包装在一个改进的视觉设计中,该设计在错误和警告之间保持一致,并允许在一个令人愉悦的 UI 中分页浏览所有日志。

通过此更改,我们还将弃用 YellowBox,转而使用 LogBox API

  • LogBox.ignoreLogs():此函数替换 YellowBox.ignoreLogs([]),作为静音与给定字符串或正则表达式匹配的任何日志的一种方式。
  • LogBox.ignoreAllLogs():此函数替换 console.disableYellowBox,作为关闭错误或警告通知的一种方式。注意:这仅禁用通知,未捕获的错误仍将打开全屏 LogBox。

在 0.63 中,当使用这些已弃用的模块或方法时,我们将发出警告。请在 0.64 中删除这些 API 之前,更新您的调用站点以脱离这些 API。

有关 LogBox 和调试 react native 的更多信息,请参阅此处的文档

Pressable

React Native 的构建旨在使应用程序满足用户对平台的期望。这包括避免“泄露”—泄露体验是使用 React Native 构建的小细节。这些泄露的主要来源之一是 Touchable 组件:ButtonTouchableWithoutFeedbackTouchableHighlightTouchableOpacityTouchableNativeFeedbackTouchableBounce。这些组件通过允许您向用户交互提供视觉反馈来使您的应用程序具有交互性。但是,由于它们包含与平台交互不匹配的内置样式和效果,因此用户可以分辨出体验是用 React Native 编写的。

此外,随着 React Native 的发展以及我们对高质量应用程序的要求提高,这些组件并没有随之发展。React Native 现在支持 Web、Desktop 和 TV 等平台,但对其他输入模式的支持一直不足。React Native 需要在所有平台上支持高质量的交互体验。

为了解决这些问题,我们正在发布一个名为 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>;

Pressable 组件在操作中的简单示例

您可以从文档中了解更多信息。

原生颜色(PlatformColor、DynamicColorIOS)

每个原生平台都有系统定义的颜色的概念。这些颜色会自动响应系统主题设置(例如浅色或深色模式)、辅助功能设置(例如高对比度模式),甚至在应用程序中的上下文(例如包含视图或窗口的特征)。

虽然可以通过 Appearance API 和/或 AccessibilityInfo 检测到其中一些设置,并相应地设置您的样式,但此类抽象不仅开发成本高昂,而且还在逼近原生颜色的外观。当在混合应用程序上工作时,尤其是在 React Native 元素与原生元素并存的情况下,这些不一致之处尤其明显。

React Native 现在提供了一个开箱即用的解决方案来使用这些系统颜色。PlatformColor() 是一个新的 API,可以像 React Native 中的任何其他颜色一样使用。

例如,在 iOS 上,系统提供了一种名为 labelColor 的颜色。可以在 React Native 中使用 PlatformColor,如下所示

import {Text, PlatformColor} from 'react-native';

<Text style={{color: PlatformColor('labelColor')}}>
This is a label
</Text>;

将 Text 组件的颜色设置为 iOS 定义的 labelColor。

另一方面,Android 提供了像 colorButtonNormal 这样的颜色。您可以在 React Native 中使用此颜色,如下所示

import {View, Text, PlatformColor} from 'react-native';

<View
style={{
backgroundColor: PlatformColor('?attr/colorButtonNormal'),
}}>
<Text>This is colored like a button!</Text>
</View>;

将 View 组件的背景颜色设置为 Android 定义的 colorButtonNormal。

您可以从文档中了解有关 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>;

根据系统主题更改文本颜色

您可以从文档中了解有关 DynamicColorIOS 的更多信息。

放弃对 iOS 9 和 Node.js 8 的支持

在其发布四年多之后,我们正在放弃对 iOS 9 的支持。此更改将使我们能够通过减少需要放置在原生代码中的兼容性检查的数量来更快地移动,以检测特定功能是否在特定 iOS 版本上受支持。凭借其1% 的市场份额,它不应对您的客户产生太多负面影响。

与此同时,我们正在放弃对 Node 8 的支持。其 LTS 维护周期已于 2019 年 12 月到期。当前的 LTS 是 Node 10,它现在是我们定位的版本。如果您仍在使用 Node 8 开发 React Native 应用程序,我们鼓励您升级以便接收所有最新的安全修复和更新。

其他值得注意的改进

  • 支持在 <Text /> 中渲染 <View /> 而无需显式大小:您现在可以在任何 <Text /> 组件中渲染任何 <View />,而无需显式设置其宽度和高度,这在以前并非总是可能的。在以前版本的 React Native 中,这会导致 RedBox。
  • 将 iOS LaunchScreen 从 xib 更改为 storyboard:从 2020 年 4 月 30 日开始,提交到 App Store 的所有应用程序都必须使用 Xcode storyboard 来提供应用程序的启动屏幕,并且所有 iPhone 应用程序都必须支持所有 iPhone 屏幕。此提交调整了默认的 React Native 模板以与此要求兼容。

感谢

感谢数百位促成 0.63 版本的贡献者!

特别感谢 Rick Hanlon 撰写了关于 LogBox 的部分,以及 Eli White 撰写了本文的 Pressable 部分。

要查看所有更新,请查看 0.63 更改日志

宣布 React Native 0.62,Flipper

·5 分钟阅读
Rick Hanlon
Facebook React Native 核心团队

今天我们发布了 React Native 0.62 版本,其中包括默认支持 Flipper。

此版本是在全球疫情期间发布的。我们今天发布此版本是为了尊重数百位促成此版本的贡献者的工作,并防止该版本落后于 master 版本太远。如果必要,请注意贡献者帮助解决问题的能力下降,并准备延迟升级。

默认启用 Flipper

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

Screenshot of Flipper for React Native

Flipper 开箱即用地提供以下功能

  • Metro 操作:直接从工具栏重新加载应用程序并触发开发菜单。
  • 崩溃报告器:查看来自 Android 和 iOS 设备的崩溃报告。
  • React DevTools:将最新版本的 React DevTools 与您的所有其他工具一起使用。
  • 网络检查器:查看设备应用程序发出的所有网络请求。
  • Metro 和设备日志:查看、搜索和筛选来自 Metro 和设备的所有日志。
  • 原生布局检查器:查看和编辑 React Native 渲染器输出的原生布局。
  • 数据库和首选项检查器:查看和编辑设备数据库和首选项。

此外,由于 Flipper 是一个可扩展平台,它提供了一个市场,可以从 NPM 中提取插件,因此您可以发布和安装特定于您的工作流程的自定义插件。请在此处查看可用的插件此处

有关更多信息,请查看 Flipper 文档

新的深色模式功能

我们添加了一个新的 Appearance 模块,以提供对用户外观首选项的访问,例如他们首选的配色方案(浅色或深色)。

const colorScheme = Appearance.getColorScheme();
if (colorScheme === 'dark') {
// Use dark color scheme
}

我们还添加了一个 Hook 来订阅用户首选项的状态更新

import {Text, useColorScheme} from 'react-native';

const MyComponent = () => {
const colorScheme = useColorScheme();
return <Text>useColorScheme(): {colorScheme}</Text>;
};

有关更多信息,请参阅 AppearanceuseColorScheme 的文档。

将 Apple TV 移至 react-native-tvos

作为我们的 精简核心工作 的一部分,为了使 Apple TV 与 React Native Windows 和 React Native 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。 升级助手提供了从您当前版本到目标版本的更改差异,使您可以查看特定升级所需的更改。

即使有了这个工具,升级时仍然会出现问题。 今天,我们宣布 Upgrade-Support,以此引入更多专门的升级支持。 Upgrade Support 是一个 GitHub 问题跟踪器,用户可以在其中提交有关升级项目的特定问题,以获得社区的帮助。

我们一直在努力改进升级体验,并且我们希望这些工具能够在我们尚未覆盖的边缘情况下为用户提供他们需要的支持。

其他改进

  • LogBox:我们正在添加新的 LogBox 错误和警告体验作为可选功能; 要启用它,请将 require('react-native').unstable_enableLogBox() 添加到您的 index.js 文件中。
  • React DevTools v4:此更改包括升级到 最新的 React DevTools,它提供了显著的性能提升、改进的导航体验以及对 React Hooks 的完全支持。
  • 辅助功能改进:我们对辅助功能进行了改进,包括添加 accessibilityValueTouchables 上缺少的 props,onSlidingComplete 辅助功能事件,以及将 Switch 组件的默认 role 从 "button" 更改为 "switch"

重大更改

  • 移除 PropTypes:我们正在从核心组件中移除 propTypes,以减少 React Native 核心代码对应用大小的影响,并倾向于在编译时而不是运行时检查的静态类型系统。
  • 移除 accessibilityStates:我们 移除了 已弃用的 accessibilityStates 属性,转而使用新的 accessibilityState prop,后者是一种语义更丰富的方式,供组件向辅助功能服务描述有关其状态的信息。
  • TextInput 更改:我们从 TextInput 中移除了 onTextInput 因为它不常见,不符合 W3C 标准,并且难以在 Fabric 中实现。 我们还移除了未记录的 inputView prop 和 selectionState

弃用

  • AccessibilityInfo.fetch 已经弃用,但在此版本中,我们 添加了一个警告
  • 现在 需要 设置 useNativeDriver,以便将来支持切换默认值。
  • Animated 组件的 ref 现在是内部组件,并且 弃用了 getNode

感谢

感谢数百位为 0.62 版本的发布做出贡献的贡献者!

要查看所有更新,请查看 0.62 更新日志

宣布 React Native 0.61,Fast Refresh

·3 分钟阅读
Dan Abramov
Facebook React Core 团队

我们很高兴地宣布 React Native 0.61 版本发布,其中包含我们称之为 Fast Refresh 的全新重新加载体验。

Fast Refresh

当我们向 React Native 社区询问 常见的痛点 时,最主要的答案之一是 “热重载” 功能已损坏。 它对函数组件的运行不可靠,经常无法更新屏幕,并且无法应对拼写错误和错误。 我们听说大多数人关闭了它,因为它太不可靠了。

在 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 本地状态。
  • 如果您需要在每次编辑时重置 React 状态,则可以在包含该组件的文件中添加特殊的 // @refresh reset 注释。
  • Fast Refresh 始终重新挂载类组件,而不保留状态。 这确保了它的可靠运行。
  • 我们都会在代码中犯错! Fast Refresh 会在您保存文件后自动重试渲染。 修复语法或运行时错误后,您无需手动重新加载应用。
  • 在编辑期间添加 console.logdebugger 语句是一种简洁的调试技术。

请在 GitHub 上报告有关 Fast Refresh 的任何问题,我们将进行调查。

其他改进

  • 修复 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 集成到 e2e 测试运行中,以便从现在开始,我们拥有将 RN 集成到 iOS 应用中的统一标准方法。 这有效地弃用了 React .xcodeproj 支持,并且该文件已从 0.61 版本开始移除。 注意:如果您已经使用了 0.60 自动链接,则不会受到影响。

感谢

感谢所有为 0.61 版本的发布做出贡献的贡献者!

要查看所有更新,请查看 0.61 更新日志

宣布 React Native 0.60

·5 分钟阅读
Ryan Turner
核心维护者 & React Native 开发者

经过数百名贡献者数月的辛勤工作,React Native 核心团队自豪地宣布 0.60 版本发布。 此版本处理了 Android 和 iOS 平台的重大迁移,并且还解决了许多问题。 这篇博文涵盖了该版本的亮点。 然而,与往常一样,请参阅更新日志以获取更详细的信息。 最后,感谢各位贡献者帮助我们实现这个里程碑!

关注辅助功能

辅助功能 API 进行了许多改进,例如 announceForAccessibility,以及对 roles动作支持flags 等的改进。 辅助功能是一门复杂的科学,但我们希望这些改进能够使 A11Y 更容易实现。 请务必查看 React Native 开源更新 2019 年 6 月,以获取有关这些更改的更多详细信息。

全新的开始

React Native 的启动画面已更新! 感谢众多帮助创建新 UI 的贡献者。 这个新的 “Hello World” 将以更友好、更引人入胜的方式欢迎用户进入生态系统。

The new init screen helps developers get started from the get-go with resources and a good example

AndroidX 支持

AndroidX 是 Android 生态系统向前迈出的重要一步,旧的支持库工件正在被弃用。 对于 0.60 版本,React Native 已迁移到 AndroidX。 这是一个重大更改,您的原生代码和依赖项也需要迁移

通过此更改,React Native 应用本身将需要开始使用 AndroidX。 它们不能在一个应用中并排使用,因此所有应用代码和依赖项代码都需要使用其中之一。

matt-oakesdiscussions-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! 存在兼容性问题,并且我们正在跟踪一个 问题,其中包含解决方法和未来的补丁。

精简核心移除

WebViewNetInfo 之前已提取到单独的仓库中,在 0.60 版本中,我们已完成将其从 React Native 仓库中迁移出来。 此外,为了响应社区对新的 App Store 政策的反馈,Geolocation 也已被提取出来。 如果您尚未完成迁移,请通过添加对 react-native-webview@react-native-community/netinfo@react-native-community/geolocation 的依赖项来完成迁移。 如果您想要自动化的解决方案,请考虑使用 rn-upgrade-deprecated-modules。 自提取以来,维护者已向这些仓库提交了 100 多个 commit,我们很高兴看到社区的支持!

原生模块现在自动链接

致力于 React Native CLI 的团队对原生模块链接引入了重大改进,称为 自动链接! 大多数情况下,将不再需要使用 react-native link。 同时,该团队全面改进了链接过程。 请务必按照上述文档中的说明 react-native unlink 任何预先存在的依赖项。

升级助手

@lucasbento@pvinis@kelset@watadarkstar 构建了一个名为 Upgrade Helper 的出色工具,以简化升级过程。 它可以帮助 React Native 用户使用棕地应用或复杂的自定义设置来查看版本之间的更改。 查看 更新的升级文档,立即为您的升级路径试用一下!

Upgrade Helper cleanly and easily shows the changes needed to migrate to a different version of React Native

致库维护者的注意事项

AndroidX 的更改几乎肯定需要更新您的库,因此请务必尽快包含支持。 如果您还无法升级,请考虑针对 jetifier 检查您的库,以确认用户可以在构建时修补您的库。

查看 自动链接 文档以更新您的配置和 readme 文件。 根据您之前集成库的方式,您可能还需要进行一些其他更改。 查看 CLI 中的 依赖项 指南,以获取有关如何定义依赖项接口的信息。

感谢

虽然这些是我们指出的亮点,但还有许多其他令人兴奋的内容。 要查看所有更新,请查看 更新日志。 与往常一样,请继续关注更多新闻。 同时享受 0.60 版本吧!

发布 React Native 0.59

·6 分钟阅读
Ryan Turner
核心维护者 & React Native 开发者

欢迎来到 React Native 0.59 版本! 这是又一个大型版本,包含 88 位贡献者的 644 个 commit。 贡献也以其他形式出现,因此感谢您维护问题、培养社区以及向人们传授有关 React Native 的知识。 本月带来了许多备受期待的更改,我们希望您喜欢它们。

🎣 Hooks 来了

React Hooks 是此版本的一部分,它使您可以在组件之间重用有状态逻辑。 关于 Hooks 的讨论很多,但如果您还没有听说过,请查看以下一些精彩资源

请务必在您的应用中尝试一下。 我们希望您发现这种重用像我们一样令人兴奋。

📱 更新的 JSC 意味着性能提升和 Android 上的 64 位支持

React Native 使用 JSC (JavaScriptCore) 为您的应用提供支持。 Android 上的 JSC 已经使用了几年,这意味着许多现代 JavaScript 功能不受支持。 更糟糕的是,与 iOS 的现代 JSC 相比,它的性能很差。 在此版本中,这一切都将改变。

感谢 @DanielZlotin@dulmandakh@gengjiawen@kmagiera@kudo 的出色工作,JSC 已经赶上了过去几年。 这带来了 64 位支持、现代 JavaScript 支持以及 巨大的性能改进。 感谢您还使这成为一个可维护的过程,以便我们能够利用未来的 WebKit 改进,而无需进行如此多的准备工作,并感谢 Software Mansion 和 Expo 使这项工作成为可能。

💨 使用内联 requires 更快地启动应用

我们希望帮助人们默认拥有高性能的 React Native 应用,并且正在努力将 Facebook 的优化带给社区。 应用根据需要加载资源,而不是减慢启动速度。 此功能称为 “内联 requires”,因为它允许 Metro 识别要延迟加载的组件。 具有深度和多样化组件架构的应用将看到最大的改进。

source of the metro.config.js file in the 0.59 template, demonstrating where to enable inlineRequires

我们需要社区告诉我们它的工作原理,然后我们才能默认开启它。 当您升级到 0.59 版本时,将有一个新的 metro.config.js 文件; 将选项翻转为 true,并向我们提供 您的反馈! 阅读有关内联 requires 的更多信息 在性能文档中,以对您的应用进行基准测试。

🚅 精简核心正在进行中

React Native 是一个庞大而复杂的项目,具有复杂的仓库。 这使得代码库对贡献者来说不那么平易近人,难以测试,并且作为开发依赖项而显得臃肿。 精简核心 是我们通过将代码迁移到单独的库以进行更好管理来解决这些问题的努力。 过去几个版本已经看到了这方面的初步进展,但 让我们认真起来

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

组件已弃用?新家
AsyncStorage0.59@react-native-community/react-native-async-storage
ImageStore0.59expo-file-systemreact-native-fs
MaskedViewIOS0.59@react-native-community/react-native-masked-view
NetInfo0.59@react-native-community/react-native-netinfo
Slider0.59@react-native-community/react-native-slider
ViewPagerAndroid0.59@react-native-community/react-native-viewpager

在接下来的几个月中,将有更多组件遵循此路径,走向更精简的核心。 我们正在寻求帮助来实现这一点 — 前往 精简核心总括 来贡献您的力量。

👩🏽‍💻 CLI 改进

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

日志现在的格式更好。 命令现在几乎立即运行 — 您会立即注意到不同之处

0.58&#39;s CLI is slow to start0.58&#39;s CLI is nearly instantaneous

🚀 升级到 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 核心团队

发布 0.56

·5 分钟阅读
Lorenzo Sciandra
核心维护者 & Drivetribe 的 React Native 开发者

期待已久的 React Native 0.56 版本现已发布 🎉。 这篇博文重点介绍了此新版本中引入的 更改。 我们还想借此机会解释一下自 3 月以来我们一直在忙什么。

重大更改困境,或者,“何时发布?”

贡献者指南 解释了所有 React Native 更改都必须经过的集成过程。 该项目由 许多不同的工具 组成,需要协调和持续支持以保持一切正常运行。 再加上为项目做出贡献的充满活力的开源社区,您将感受到这一切令人难以置信的规模。

随着 React Native 令人印象深刻的采用,必须非常谨慎地进行重大更改,并且该过程并不像我们希望的那样顺利。 决定跳过 4 月和 5 月的发布,以便核心团队可以集成和测试一组新的重大更改。 沿途使用了 专门的社区沟通 渠道,以确保 2018 年 6 月 (0.56.0) 版本对于那些耐心等待稳定版本的人来说尽可能轻松地采用。

0.56.0 版本完美吗?不,就像市面上所有的软件一样:但是我们已经达到了一个临界点,在这个点上,我们权衡了“等待更稳定”和“测试带来了成功的结果,所以我们可以向前推进”之间的利弊,我们觉得现在可以发布它了。此外,我们还意识到 一些 问题 在最终的 0.56.0 版本中尚未解决。大多数开发者应该可以顺利升级到 0.56.0 版本。对于那些受到上述问题困扰的开发者,我们希望在讨论中看到你们的身影,并期待与你们合作解决这些问题。

你可以将 0.56.0 版本视为构建更稳定框架的基础模块:可能需要一到两周的广泛应用才能消除所有的边缘情况,但这将促成更加出色的 2018 年 7 月 (0.57.0) 版本发布。

在本节的结尾,我们要感谢 所有 67 位贡献者,他们总共提交了 818 次 commits (!),这将帮助你的应用变得更好 👏。

现在,无需赘言...

重大变更

Babel 7

您可能知道,Babel,这个转译器工具使我们能够使用 JavaScript 最新的最强大的功能,即将升级到 v7 版本。由于这个新版本带来了一些重要的变化,我们认为现在是升级的好时机,以便 Metro 可以 利用其改进

如果您在升级时遇到问题,请参考 相关的文档部分

Android 支持现代化

在 Android 方面,许多周边工具已经发生了变化。我们已更新到 Gradle 3.5Android SDK 26Fresco 1.9.0 和 OkHttp 3.10.0,甚至 NDK API 目标也更新到 API 16。这些更改应该可以顺利进行,并加快构建速度。更重要的是,这将帮助开发者遵守下个月生效的 新的 Play 商店要求

与此相关,我们要特别感谢 Dulmandakh 提交了许多 PR,使这一切成为可能 👏。

在这个方向上还需要采取更多步骤,您可以关注 专门的 issue 中关于更新 Android 支持的未来规划和讨论(以及关于 JSC 的一个次要 issue)。

新的 Node、Xcode、React 和 Flow – 哇哦!

Node 8 现在是 React Native 的标准。实际上它已经在测试中了,但是随着 Node 6 进入维护模式,我们已经全面推进到 Node 8。React 也已更新到 16.4,带来了大量的修复。

我们正在放弃对 iOS 8 的支持,使 iOS 9 成为可以支持的最旧的 iOS 版本。我们不认为这会成为问题,因为任何可以运行 iOS 8 的设备都可以升级到 iOS 9。此更改使我们能够删除为运行 iOS 8 的旧设备实现权变措施的很少使用的代码。

持续集成工具链已更新 以使用 Xcode 9.4,确保所有 iOS 测试都在 Apple 提供的最新开发者工具上运行。

我们已升级到 Flow 0.75 以使用 许多开发者赞赏 的新错误格式。我们还为更多组件创建了类型。如果您尚未在项目中强制执行静态类型检查,请考虑使用 Flow 在编码时而不是在运行时识别问题。

以及许多其他事情...

例如,YellowBox 已被 替换 为新的实现,这使得调试变得更好。

有关完整的发行说明,请参考完整的 更新日志。并记住关注 升级指南,以避免迁移到这个新版本时出现问题。


最后说明一下:从本周开始,React Native 核心团队将恢复举行月度会议。我们将确保让每个人及时了解会议内容,并确保将您的反馈意见放在手边,以供未来的会议使用。

祝大家编码愉快!

Lorenzo, Ryan, 以及整个 React Native 核心团队

PS: 与往常一样,我们要提醒大家,React Native 仍然处于 0.x 版本控制中,因为仍然有很多更改正在进行中 - 所以请记住,升级时,是的,可能仍然会发生崩溃或出现错误。在 issues 中以及提交 PR 时,请互相帮助 - 并记住遵守强制执行的 CoC:屏幕的另一端始终是人。