React Native 的 2018 年終總結

Marno發表於2019-01-21
  • 本文為 Marno 原創,轉載必須註明出處!
  • 公眾號【 aMarno 】,關注後回覆 RN 加入交流群
  • 關注公眾號,快來加入我們的開發陣營吧!

React Native 的 2018 年終總結

一年一度的 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 個。

React Native 的 2018 年終總結

在這 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》

React Native 的 2018 年終總結

相關文章