React Native 0.59 版本发布了

2019-04-09

前言

本文的原作者是 Ryan Turner,文章源链接为 Releasing React Native 0.59,我将其翻译为中文,并对非关键信息做了一定的删减。

React Native 的 0.59 版本发布了!在这个版本中有来自 88 个贡献者中的 644 个提交(Maxiee 注:其中一个是我提交的~)。React Hooks、Android 64位 JSC、提高启动速度、瘦内核、CLI 增强。

贡献不仅来自提交,也来自其他方式,包括维护 issues,参与社区,教授别人 React Native 等等。

这一版本带来很多大的改变。

🎣 Hooks 来了

在这个版本中带来了 React Hooks,它让你在组件间复用状态相关的逻辑。

关于 Hooks 的资料很多,如果你之前没有听说过,可以看看这些资源:

一定要自己写个 Demo 试试,体验下激动人心的复用效果。

📱更新了 JSC,带来性能提升和 Android 的 64 位支持

React Native 使用 JSC (JavaScriptCore) 作为 JS 引擎。

Android 上的 JSC 已经是几年前的了,很多现代 JavaScript 它都不支持。

更差的是,它的性能跟 iOS 上的现代 JSC 相比差很多。

在这个版本中,这个问题得到了极大改善。

感谢来自 @DanielZlotin, @dulmandakh, @gengjiawen, @kmagiera@kudo 的给力成果,将 JSC 从几年前的版本赶上来了。

这带来了 64 位支持、现代 JavaScript 支持,以及巨大的性能提升 big performance improvements

Kudos 将这个过程变成了一个可维护的过程,这样我们可以方便地在未来引入 WebKit 的增强,还要感谢 Software Mansion 和 Expo。

💨 使用 inline requires 更快的 APP 启动

我们想默认帮助人们提高 React Native 的性能,因此我们正在将 Facebook 内的优化方式带到社区中。

应用加载按需资源,避免降低启动速度。这个特性叫 inline requires,它让 Metro 辨别懒加载的组件。

层次深且组件多变的 APP 将会感受到明显的提升。

在将其作为默认选项之前,我们需要社区向我们反馈它的效果。

当你升级到 0.59 后,会有一个新的 metro.config.js 配置文件,将选项设为 true 进行体验,并向我们反馈效果

更多关于 inline requires 请参见文档,来测试 APP 的性能。

🚅 瘦内核正在进行中

React Native 是一个大型的复杂项目,代码仓库也很复杂。

这使得 React Native 的代码难以让贡献者参与,难以测试,并且作为开发依赖也很臃肿。

瘦内核是我们解决这一问题的努力,通过将部分代码分离到单独的库当中,来获得更好的可维护性。

在过去几个版本中已经可以看到第一步的努力,但是重要的还在后面。

你会注意到一些组件被官方废弃了。

这是好消息,因为现在他们都有了活跃的维护者。

如果看到警告信息,请迁移到新的库中,React Native 在未来会删除这些组件。

下面是要废弃的组件的列表:

组件废弃版本新仓库
AsyncStorage0.59@react-native-community/react-native-async-storage
ImageStore0.59expo-file-system or react-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 工具被迁移到一个新项目,由一群专门的维护者进行维护,并带来了很多新特性。

Log 的格式变得更好了。命令的执行速度也变快了。

🚀 升级到 0.59

我们收到了大家关于升级过程的反馈,会在未来的版本中改善这些体验。

我们建议使用 rn-diff-purge 来确认你当前的 RN 版本与 0.59 有哪些差异,并手动应用改动。

一旦升级到 0.59,就可以使用新的增强的 react-native upgrade 命令(基于 rn-diff-purge)来升到 0.60 甚至更新的版本。

🔨 破坏性的变化

0.59 的 Android 版本进行了清理,以遵循 Google 的最新建议,这导致对现有 APP 会有破坏性变化。

这个问题会导致一个运行时崩溃,并带有一个消息:"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 命令。

🤗 感谢

大量新的贡献者参与了 enabling generation of native code from flow typesresolving Xcode warnings,这些是学习 React Native 工作方式的很好的方,贡献也是非常棒!谢谢你们。

changelog 请参见这里。0.59 是一个非常大的版本,我们期待你的使用!