跳至主要内容

发布 React Native 0.59

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

欢迎使用 React Native 的 0.59 版本!这是另一个重大的版本,包含了来自 88 位贡献者的 644 次提交。贡献也以其他形式出现,因此感谢您维护问题、培养社区以及向人们传授 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 使这项工作成为可能。

💨 使用内联 require 加速应用启动

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

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

我们需要社区告诉我们它如何工作,然后再将其默认启用。当您升级到 0.59 时,将会有一个新的 metro.config.js 文件;将选项翻转为 true 并给我们 反馈!阅读有关内联 require 的更多信息,在性能文档中 对您的应用进行基准测试。

🚅 精简核心正在进行中

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's CLI is slow to start0.58'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 的最新建议进行了清理,这可能会导致现有应用程序出现潜在问题。此问题可能表现为运行时崩溃以及一条消息:“您需要在此活动中使用 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 是一个巨大的版本 - 我们迫不及待地想让您尝试一下。

我们将在今年余下的时间里推出更多改进。敬请期待!

Ryan 和整个React Native 核心团队