- 本文为 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 的人最多?可以留言回复!
参考文档:(链接需要复制打开)