宣布 React Native 0.66 发布
今天我们发布 React Native v0.66,支持 Android 12 和 iOS 15,同时包含修复和常规更新。
今天我们发布 React Native v0.66,支持 Android 12 和 iOS 15,同时包含修复和常规更新。
今天我们发布 React Native 0.65 版本,其中包含新版 Hermes、无障碍改进、软件包升级及更多内容。
Facebook 为 React Native 优化的开源 JavaScript 虚拟机 Hermes 已升级到 0.8.1 版本。此版本的一些突出功能包括:
Intl
) 现在已内置于 Android 上的 Hermes 中并默认启用,每个 API 的大小开销仅为 57-62KB(相比之下,JSC 为 6MiB)。通过此更改,Hermes 用户不再需要区域设置 polyfills。非常感谢 @mganandraj 和微软的其他合作伙伴推动了此功能的实现!Function.prototype.toString
的更改修复了由于不当的特性检测导致的性能下降,并支持源代码注入用例。您可以在此处找到完整的 Hermes 更新日志。
如果您尚未将应用程序选择启用 Hermes,请按照此处步骤操作,以利用这些新功能和改进!
去年,Facebook 签署了 GAAD 承诺,以改善 React Native 的无障碍性。0.65 版本分享了此承诺的成果及其他无障碍方面的进展!一些值得注意的更改包括:
getRecommendedTimeoutMillis
API。这暴露了用户在 Android 无障碍选项中设置的首选默认超时值,适用于可能需要额外时间查看或操作控件的用户等。disabled
(禁用)和 unselected
(未选择)。您可以在此处关注或贡献于我们悬而未决的无障碍问题!
react-native-codegen
0.0.7 版本现在需要在 package.json
中作为 devDependency
依赖项。本次发布包含了来自 61 位贡献者 的超过 1100 次提交。感谢所有为本次发布做出贡献和提供支持的人!您可以在此处查看完整的更新日志。
今天我们发布 React Native 0.64,该版本支持 iOS 上的 Hermes。
Hermes 是一个为运行 React Native 而优化的开源 JavaScript 引擎。它通过减少内存使用、缩小下载大小和缩短应用程序可用时间或“可交互时间”(TTI) 来提高性能。
通过此版本,我们很高兴地宣布您现在也可以在 iOS 上使用 Hermes 进行构建。要在 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 是一种 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 的更多信息,请参阅性能文档。
在过去一年中,Facebook 赞助了 Major League Hacking 奖学金,支持对 React Native 的贡献。Jessie Nguyen 和 Saphal Patro 增加了在 Chrome DevTools 的 Performance 选项卡中使用 Hermes 时,可视化应用程序执行的能力。
有关更多信息,请查阅新文档页面。
我们已向 Hermes 添加了代理支持,从而实现了与流行社区项目(如 react-native-firebase 和 mobx)的兼容性。如果您一直在使用这些包,现在可以为您的项目迁移到 Hermes。
我们计划在未来的版本中将 Hermes 设置为 Android 的默认 JavaScript 引擎,因此我们正在努力解决人们在使用 Hermes 时遇到的剩余问题。如果您的应用程序因使用 Hermes 而仍存在问题,请在 Hermes GitHub 仓库上提出问题。
React 17 不包含面向开发者的新功能或重大破坏性变更。对于 React Native 应用程序来说,主要变化是新的 JSX 转换,它使得文件不再需要导入 React 即可使用 JSX。
有关 React 17 的更多信息可在React 博客上找到。
感谢数百位贡献者,他们的帮助使得 0.64 版本得以实现!0.64 更新日志包含了此版本中的所有更改。
今天我们发布 React Native 0.63 版本,该版本默认开启 LogBox。
我们经常收到社区反馈,称 React Native 中的错误和警告难以调试。为了解决这些问题,我们审查了 React Native 中的整个错误、警告和日志系统,并从头开始重新设计了它。
LogBox 是 React Native 中经过完全重新设计的 redbox、yellowbox 和日志体验。在 0.62 版本中,我们将 LogBox 作为可选择的功能引入。在此版本中,我们将 LogBox 作为 React Native 中所有体验的默认功能发布。
LogBox 通过关注三个主要目标,解决了关于错误和警告过于冗长、格式不佳或无法操作的抱怨
为实现这些目标,LogBox 包含:
我们将所有这些功能封装在一个改进的视觉设计中,该设计在错误和警告之间保持一致,并允许在统一的用户界面中对所有日志进行分页。
随着此更改,我们也将弃用 YellowBox,转而使用 LogBox API。
LogBox.ignoreLogs()
:此函数替代 YellowBox.ignoreLogs([])
,用于静默与给定字符串或正则表达式匹配的任何日志。LogBox.ignoreAllLogs()
:此函数替代 console.disableYellowBox
,用于关闭错误或警告通知。注意:这仅禁用通知,未捕获的错误仍将打开全屏 LogBox。在 0.63 版本中,使用这些已弃用的模块或方法时将发出警告。请在 0.64 版本移除这些 API 之前更新您的调用点。
有关 LogBox 和调试 React Native 的更多信息,请参阅此处的文档。
React Native 旨在使应用程序满足用户对平台的期望。这包括避免“蛛丝马迹”——那些暗示体验是用 React Native 构建的微小细节。这些蛛丝马迹的一个主要来源是 Touchable 组件:Button
、TouchableWithoutFeedback
、TouchableHighlight
、TouchableOpacity
、TouchableNativeFeedback
和 TouchableBounce
。这些组件通过允许您为用户交互提供视觉反馈,使您的应用程序具有交互性。然而,由于它们包含与平台交互不符的内置样式和效果,用户可以分辨出哪些体验是用 React Native 编写的。
此外,随着 React Native 的发展以及我们对高质量应用程序的要求提高,这些组件并未随之发展。React Native 现在支持 Web、桌面和电视等平台,但对额外输入方式的支持却一直不足。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 组件的简单示例
您可以从文档中了解更多信息。
每个原生平台都有系统定义的颜色概念。这些颜色会自动响应系统主题设置(如亮模式或暗模式)、辅助功能设置(如高对比度模式),甚至应用程序中的上下文(如包含视图或窗口的特性)。
虽然可以通过 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 的支持。这一变化将允许我们通过减少原生代码中为检测给定功能是否在特定 iOS 版本上受支持而需要的兼容性检查数量,从而更快地推进。考虑到其 1% 的市场份额,它不应对您的客户产生太大负面影响。
同时,我们正在放弃对 Node 8 的支持。其 LTS 维护周期已于 2019 年 12 月到期。当前的 LTS 是 Node 10,这也是我们现在所针对的版本。如果您仍在将 Node 8 用于 React Native 应用程序的开发,我们鼓励您升级以接收所有最新的安全修复和更新。
<Text />
中渲染 <View />
而无需明确尺寸:现在您可以在任何 <Text />
组件中渲染任何 <View />
,而无需明确设置其宽度和高度,这以前并非总是可行。在以前的 React Native 版本中,这会导致 RedBox。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 支持。
此版本在全球大流行期间发布。我们今天发布此版本是为了尊重数百位贡献者所做的工作,他们使此版本成为可能,并防止版本落后主分支太远。请注意贡献者帮助解决问题的能力有所下降,并准备好在必要时推迟升级。
Flipper 是一款用于调试移动应用程序的开发者工具。它在 Android 和 iOS 社区中很受欢迎,在此版本中,我们已默认支持新的和现有的 React Native 应用程序。
Flipper 提供以下开箱即用的功能:
此外,由于 Flipper 是一个可扩展平台,它提供了一个从 NPM 拉取插件的市场,因此您可以发布和安装特定于您工作流程的自定义插件。在此处查看可用插件:https://npmjs.net.cn/search?q=flipper-plugin。
欲了解更多信息,请查看 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>;
};
有关更多信息,请参阅 Appearance 和 useColorScheme 的文档。
作为我们的 Lean Core 努力的一部分,并将 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 问题跟踪器,用户可以在其中提交与升级其项目相关的问题,以获得社区的帮助。
我们一直在努力改进升级体验,我们希望这些工具能为用户提供他们尚未涵盖的边缘情况所需的支持。
index.js
文件中添加 require('react-native').unstable_enableLogBox()
。onSlidingComplete
可访问性事件,并将 Switch 组件的默认角色从 "button"
更改为 "switch"
。propTypes
,以减少 React Native 核心对应用程序大小的影响,并倾向于在编译时而非运行时进行检查的静态类型系统。accessibilityStates
属性,转而使用新的 accessibilityState
prop,这是一种更具语义化地描述组件状态信息给辅助功能服务的方式。onTextInput
,因为它不常见,不符合 W3C 标准,并且在 Fabric 中难以实现。我们还移除了未文档化的 inputView
prop 和 selectionState
。AccessibilityInfo.fetch
已被弃用,但在此版本中我们添加了警告。useNativeDriver
,以便将来支持切换默认值。Animated
组件的 ref
现在是内部组件,并且 已弃用 getNode
。感谢数百位贡献者,他们的帮助使得 0.62 版本得以实现!
要查看所有更新,请查阅 0.62 更新日志。
我们很高兴地宣布 React Native 0.61 版本发布,其中包含一种新的重新加载体验,我们称之为“快速刷新”(Fast Refresh)。
当我们询问 React Native 社区关于常见痛点时,最主要的回答之一是“热重载”功能已损坏。它对函数组件不可靠,经常无法更新屏幕,并且对拼写错误和错误不具有弹性。我们听说大多数人因为其不可靠而将其关闭。
在 React Native 0.61 中,我们将现有的“实时重载”(保存时重载)和“热重载”功能统一为一个新的功能,称为“快速刷新”(Fast Refresh)。快速刷新是从头开始实现的,遵循以下原则:
要查看快速刷新的实际效果,请观看此视频:
尝试一下,并告诉我们您的想法!如果您愿意,可以在开发菜单中将其关闭(iOS 上按 Cmd+D,Android 上按 Cmd+M 或 Ctrl+M)。开启和关闭都是即时的,因此您可以随时操作。
以下是一些快速刷新提示:
// @refresh reset
注释。console.log
或 debugger
语句是一种简洁的调试技术。请在 GitHub 上报告快速刷新存在的任何问题,我们将进行调查。
act
的改进等。有关自动化迁移脚本和更多信息,请参阅 React 16.9 博客文章。感谢所有为 0.61 版本做出贡献的贡献者!
要查看所有更新,请查阅 0.61 更新日志。
经过数百位贡献者数月辛勤工作,React Native 核心团队自豪地宣布发布 0.60 版本。此版本处理了 Android 和 iOS 平台的重大迁移,并解决了许多问题。本博客文章涵盖了此版本的亮点。一如既往,请查阅更新日志以获取更详细的信息。最后,感谢贡献者们帮助我们实现这一里程碑!
可访问性 API 方面有许多改进,例如 announceForAccessibility,以及对角色、动作支持、标志等的改进。可访问性是一门复杂的学问,但我们希望这些改进能让 A11Y 变得更容易。请务必查看 React Native 2019 年 6 月开源更新以获取这些更改的更多详细信息。
React Native 的启动界面已更新!感谢众多贡献者帮助创建了新的 UI。这个新的“Hello World”将以更友好、更引人入胜的方式欢迎用户进入这个生态系统。
AndroidX 是 Android 生态系统向前迈出的重要一步,旧的支持库构件正在被弃用。对于 0.60 版本,React Native 已迁移到 AndroidX。这是一个破坏性更改,您的原生代码和依赖项也需要迁移。
随着这一变化,React Native 应用程序将需要开始使用 AndroidX 本身。它们不能在同一个应用程序中并存使用,因此所有应用程序代码和依赖代码都需要使用其中一个。
虽然您自己的原生代码需要您自行迁移,但 @mikehardy、@cawfree 和 @m4tt72 构建了一个名为“jetifier”的巧妙工具来修补您的 node_modules
。库维护者需要升级,但此工具为您提供了一个临时解决方案,同时为他们提供了发布 AndroidX 版本的时间。因此,如果您发现与 AndroidX 迁移相关的错误,请尝试一下。
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 构建了一个名为 升级助手 的出色工具,以简化升级过程。它帮助 React Native 用户(特别是使用 brownfield 应用或复杂自定义的用户)查看版本之间的变化。查看更新的升级文档,并立即尝试它来升级您的项目!
AndroidX 的更改几乎肯定需要更新您的库,因此请务必尽快包含支持。如果您暂时无法升级,请考虑对照 jetifier 检查您的库,以确认用户能够在构建时修补您的库。
请查阅自动链接文档以更新您的配置和自述文件。根据您的库以前的集成方式,您可能还需要进行一些额外的更改。请查阅 CLI 中的依赖项指南,以获取有关如何定义依赖项接口的信息。
虽然这些是我们注意到的亮点,但还有许多其他令人兴奋的更新。要查看所有更新,请查阅更新日志。一如既往,请继续关注更多新闻。在此期间,请享受 0.60 版本!
欢迎来到 React Native 0.59 版本发布!这是又一个重要版本,包含 88 位贡献者的 644 次提交。贡献也以其他形式出现,因此感谢您维护问题、培养社区以及向人们教授 React Native。本月带来了许多备受期待的更改,我们希望您会喜欢它们。
React Hooks 是此版本的一部分,它允许您在组件之间重用有状态逻辑。关于 Hooks 有很多热议,但如果您还没有听说过,请查看以下一些精彩的资源:
- Hooks 简介解释了我们为什么要将 Hooks 添加到 React 中。
- Hooks 概览是内置 Hooks 的快速概览。
- 构建您自己的 Hooks 展示了如何使用自定义 Hooks 进行代码重用。
- 理解 React Hooks 探讨了 Hooks 开启的新可能性。
- useHooks.com 展示了社区维护的 Hooks 配方和演示。
请务必在您的应用程序中尝试一下。我们希望您会像我们一样,对重用感到兴奋。
React Native 使用 JSC (JavaScriptCore) 来驱动您的应用程序。Android 上的 JSC 已经好几年没有更新了,这意味着许多现代 JavaScript 特性都不受支持。更糟糕的是,与 iOS 现代的 JSC 相比,它的性能很差。随着这个版本的发布,所有这些都将改变。
感谢 @DanielZlotin、@dulmandakh、@gengjiawen、@kmagiera 和 @kudo 的出色工作,JSC 赶上了过去几年。这带来了 64 位支持、现代 JavaScript 支持和巨大的性能改进。此外,也要感谢他们现在使这个过程可维护,这样我们就可以在未来利用 WebKit 的改进而无需太多额外工作,还要感谢 Software Mansion 和 Expo 使这项工作成为可能。
我们希望默认帮助人们获得高性能的 React Native 应用程序,并正在努力将 Facebook 的优化带给社区。应用程序按需加载资源,而不是减慢启动速度。此功能称为“内联 require”,因为它允许 Metro 识别需要延迟加载的组件。具有深度和多样化组件架构的应用程序将看到最大的改进。
我们需要社区告诉我们它的效果如何,然后我们才能默认开启它。当您升级到 0.59 时,会有一个新的 metro.config.js
文件;将选项设置为 true 并给我们您的反馈!阅读更多关于内联 require 的信息,请查看性能文档以基准测试您的应用程序。
React Native 是一个庞大而复杂的项目,拥有复杂的仓库。这使得代码库对贡献者而言不那么容易上手,难以测试,并且作为开发依赖项过于臃肿。精简核心是我们通过将代码迁移到单独的库以实现更好的管理来解决这些问题的努力。过去几个版本已经迈出了第一步,但是让我们认真对待。
您可能会注意到,更多组件现在已正式弃用。这是个好消息,因为现在这些功能有了积极维护它们的所有者。请注意警告消息,并迁移到这些功能的新库,因为它们将在未来的版本中移除。下表显示了组件、其状态以及您可以迁移到的新位置。
组件 | 已弃用? | 新位置 |
---|---|---|
AsyncStorage | 0.59 | @react-native-community/react-native-async-storage |
ImageStore | 0.59 | expo-file-system 或 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 |
在接下来的几个月里,将有更多组件遵循这条路径,实现更精简的核心。我们正在寻求帮助——请前往精简核心伞形问题贡献力量。
React Native 的命令行工具是开发者进入生态系统的入口,但它们长期存在问题,并且缺乏官方支持。CLI 工具已移至新仓库,并且一个专门的维护者团队已经取得了一些令人兴奋的改进。
日志的格式现在好很多了。命令现在几乎立即运行——您会立即注意到差异。
我们听取了您关于 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 的最新建议,这可能会导致现有应用程序潜在的破坏。此问题可能表现为运行时崩溃和一条消息:“您需要使用 Theme.AppCompat 主题(或其子主题)与此活动”。我们建议更新您的项目 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 是一个巨大的版本——我们迫不及待地想让您试用它。
今年剩下的时间里,我们还将带来更多改进。敬请期待!
期待已久的 React Native 0.56 版本现已发布 🎉。本博客文章重点介绍了此新版本中引入的一些更改。我们还想借此机会解释一下自三月以来是什么让我们一直忙碌。
贡献者指南解释了所有对 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 次提交(!)来帮助您的应用程序变得更好👏。
现在,闲话少叙...
您可能知道,允许我们所有人使用最新、最棒的 JavaScript 功能的转译工具 Babel 即将发布 v7 版本。由于这个新版本带来了一些重要的更改,我们认为现在是升级的好时机,以便 Metro 可以利用其改进。
如果您在升级时遇到问题,请参阅相关文档部分。
在 Android 上,许多周边工具已发生变化。我们已更新到 Gradle 3.5、Android SDK 26、Fresco 到 1.9.0,以及 OkHttp 到 3.10.0,甚至 NDK API 目标到 API 16。这些更改应该会顺利进行,并带来更快的构建速度。更重要的是,它将帮助开发者遵守下个月生效的新的 Play Store 要求。
与此相关,我们要特别感谢 Dulmandakh 提交了许多 PR 以使其成为可能 👏。
在这个方向上还需要采取一些步骤,您可以在专门的问题(以及 JSC 的另一个问题)中跟踪未来 Android 支持更新的规划和讨论。
Node 8 现在是 React Native 的标准。它实际上已经在测试中,但由于 Node 6 进入维护模式,我们全力以赴。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 版本,因为还有许多更改正在进行中——所以请记住,在升级时,是的,可能仍然会有一些东西崩溃或损坏。在问题中和提交 PR 时,请互相帮助——并记住遵循执行的行为准则:屏幕对面总有一个人。