跳转到主要内容

发布 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 的信息 在性能文档中 以基准测试您的应用。

🚅 Lean Core 正在进行中

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

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

组件已弃用?新家
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

在接下来的几个月中,将有更多组件遵循这条通往更精简核心的道路。我们正在寻求帮助 - 前往 lean core umbrella 参与进来。

👩🏽‍💻 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 核心团队