- 本文為 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 的人最多?可以留言回覆!
參考文件:(連結需要複製開啟)