React Native 的 2018 年终总结

  • 本文为 Marno 原创,转载必须注明出处!
  • 公众号【 aMarno 】,关注后回复 RN 加入交流群
  • 关注公众号,快来加入我们的开发阵营吧!

一年一度的 React Native 年终总结终于来了,其实这样的文章几乎是没有什么技术含量的,更像是一个脏活累活,没什么人愿意干的活。简单来说,就是把 2018 年所有的更新日志看一遍,然后统计出数据,并且挑出一些比较重要的更新内容罗列出来。

一些数据


2018 年这一年:

React Native 共更新了 52 个版本,
2017 年的 92 个减少了近一半, 平均 4.33 个/月,1.0 个/周。
其中正式版共 6 个(有 release 日志),
平均 0.5 个/月,比 Fb 计划要少。
18 年第一个版本是 0.52.0
最后一个版本是0.57.8
2 月发布版本最多,共 9 个,
5 月发布最少,为 0 个。

在这 52 个版本中,更新内容有:

仅针对 Android:

  • 新特性:20 个
  • 修复 bug:88 个
  • 修改:44 个
  • 移除:6 个

仅针对 iOS:

  • 新特性:25 个
  • 修复 bug:94 个
  • 修改:25 个
  • 移除:7 个

双平台通用:

  • 新特性:36 个
  • 修复 bug:107 个
  • 修改:155 个
  • 移除:16 个

以及其他级别较低的修改有:127 个

关键更新内容


0.52 版本

  • CaemraRoll 新增 deletePhotos 方法
  • DataPickerIOS 增加 locale 属性

0.53 版本

  • TextInput 移除 autoGrow 属性

0.54 版本

  • 支持在 node_module 中使用动态依赖
  • VirtualizedList 添加 invertStickyHeaders 属性
  • 布局添加 space-evenly 属性
  • bundle command 增加 --minify 命令
  • VR 平台支持 ScrollView 组件

0.55 版本

  • 支持在 Android TV 设备上使用 RN
  • useNativeDriver 属性支持动态设置的 Animated.Values
  • TextInput 增加 contextMenuHidden 属性
  • Android:Text 和 TextInput 支持 letterSpacing 设置字间距
  • iOS:新增 InputAccessoryView 组件
  • iOS:新增 --simulator 命令指定程序运行的虚拟机

0.56 版本(今年升级幅度最大)

  • 升级到 Babel 7
  • Node 环境最低要求 Node 8
  • iOS 平台最低要求 iOS 9
  • Xcode 最低要求 Xcode 9
  • Android 默认使用 SDK26 编译
  • WebView 默认不支持加载 file:// 路径
  • 支持 ?. 链式操作符
  • flexWrap 属性支持 wrap-reverse 模式
  • templates(样板工程)支持 devDependcies 配置
  • iOS:Text 组件新增 textTransform 属性
  • Android:Image 组件支持 defaultSource 属性
  • 大量组件从 PropTypes 迁移到使用 Flow type
  • TextInput 移除 focusTextInput 和 blurTextInput 属性,使用 TextInput.State 代替

0.57 版本

  • FlatList 和 SectionList 支持 Animated
  • 给 VirtualizedList 和 FlatList 新增 ListHeaderComponentStyle 及 ListFooterComponentStyle 属性
  • ScrollView 添加 snapToOffsets 属性
  • 移除 ScrollView.propTypes,使用 flow 代替
  • CLI:ram-bundle 代替 unbundle
  • iOS:通过 useWebKit 属性控制是否使用 WKWebView
  • Android:增加支持 overflow 属性

0.57.1 版本

  • WebView 增加 allowFileAccess 属性

0.57.4 版本

  • 从 ListView 中移除 TimerMixin
  • Android:Text 组件支持 textTransform 属性
  • iOS:run-ios 命令支持指定 iOS 版本

关于 2019 年的重构


去年写总结的时候,预估按照当时的更新频率,至少要 2021 年才能等到 1.0.0 正式版,但是今天发现,可能当时还是太乐观了。今年更新的频率直接比去年低了近一半,不知道是 Facebook 在刻意控制更新的速度,减少投入的人力资源。还是确实不知道该怎么更新下去了,就只好缝三年补三年,缝缝补补又三年。

不过我相信应该是前者,因为 Fb 官方宣布将在 2019 年对 RN 进行大量重构,所以就减少了版本更新的频率,将大部分的精力集中到代码的重构上。根据发布的消息来看,重构工作主要体现在以下三个方面:

  • Fabric:重构 UI 层,提高 UI 绘制性能
  • JSI:可以使用其他 JS VM 代替 JavaScriptCore
  • TurboModules:通过 JSI 重构 NativeModule



目前重构已经初见成效,其中 Fabric 已经在广泛使用,还有 JSI 以及 TurboModules 也会在 2019 年得到更多的优化。官方还表示,重构更多的是在底层进行改动,不会对公开的 API 进行太多的调整,开发者不需要做太多的工作,就能升级到最新的版本。

除了上述几个核心的内容外,还有个不得不提到的变化。Fb 会将越来越多的非核心组件,从 RN 主仓库移到 react-native-community 的仓库中进行维护迭代,比如:react-native-webview。因为他们发现近两年中大部分的 Breaking 更新,几乎都是来自于组件的变化。所以将一部分组件抽离之后,不仅能提高核心库的稳定性,还能在社区的帮助下,让组件进行更快速的迭代。

还有,官方在博客中也反复提到,以上这些变化,都会有助于将 RN 更快的推向 1.0.0 版本,不知道这是不是在暗示着什么呢?

如果你想知道更多关于重构的内容,可以参考文末的链接(有些可能需要梯子)。

总结


2018 年对于 React Native 来说,算是“腹背受敌”的一年。首先是有公司宣布不再使用 RN,其中不乏大名鼎鼎的 Airbnb。其次还受到新的跨平台技术的挑战,比如最近热度较高的 Flutter,而处在技术行业这样一个“喜新厌旧”的领域,RN 确实应该感受到了一些“威胁”。

但不论如何,作为一个已经发展了这么久的技术来说,我们还是真心希望如官方所言,能在2019 年见到 RN 焕发出新的活力,给我们带来更多惊喜!说不定,19 年真的就能看到 1.0.0 的正式版了!

最后做个小小的统计,看下用哪个版本 RN 的人最多?可以留言回复!

参考文档:(链接需要复制打开)

  1. 《React Native 的 2017 年终总结》

  2. 《2018 年所有英文更新日志汇总》

  3. 《State of React Native 2018》

  4. 《Open Source Roadmap》

  5. 《React Native New Architecture》

  6. 《What is Fabric》

  7. 《Discussion about Fabric》

  8. 《Discussion about TurboModule》

  9. 《Discussion about Lean Core》

猜你喜欢

转载自juejin.im/post/5c4473f251882522c03e941e