发布 React Native 0.59
欢迎使用 React Native 的 0.59 版本!这是另一个重大的版本,包含了来自 88 位贡献者的 644 次提交。贡献也以其他形式出现,因此感谢您维护问题、培养社区以及向人们传授 React Native 的知识。这个月带来了许多备受期待的更改,我们希望您喜欢它们。
🎣 Hooks 已上线
React Hooks 是此版本的一部分,它允许您在组件之间重用有状态逻辑。关于 Hooks 的讨论非常热烈,但如果您还没有听说过,请查看下面的一些精彩资源
- 介绍 Hooks 解释了我们在 React 中添加 Hooks 的原因。
- Hooks 概览 是对内置 Hooks 的快速概述。
- 构建您自己的 Hooks 演示了使用自定义 Hooks 进行代码重用。
- 理解 React Hooks 探讨了 Hooks 开启的新可能性。
- useHooks.com 展示了社区维护的 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 识别要延迟加载的组件。具有深层且多样化组件架构的应用程序将看到最大的改进。
我们需要社区告诉我们它如何工作,然后再将其默认启用。当您升级到 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 |
在未来几个月里,将会有更多组件遵循这条路径走向更精简的核心。我们正在寻求帮助 - 前往 精简核心总览 参与其中。
👩🏽💻 CLI 改进
React Native 的命令行工具是开发人员进入生态系统的入口点,但它们存在长期存在的问题并且缺乏官方支持。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 的最新建议进行了清理,这可能会导致现有应用程序出现潜在问题。此问题可能表现为运行时崩溃以及一条消息:“您需要在此活动中使用 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 是一个巨大的版本 - 我们迫不及待地想让您尝试一下。
我们将在今年余下的时间里推出更多改进。敬请期待!