【0.58】React Native 中文更新日誌

Marno發表於2019-01-28
  • 本文為 Marno 原創,轉載必須保留出處!
  • 公眾號【 Marno 】,關注後回覆 RN 加入交流群,等你來!
  • React Native 優秀開源專案大全:www.marno.cn

導讀


很久沒有翻譯過更新日誌了,主要我確實抽不出這麼多的時間來。翻譯更新日誌是非常消耗時間的一件事。之前我在翻譯的時候,基本上會把所有更新內容都看一遍,不只是列表裡的內容,而是每個 commit  詳情內容都會看。有時候如果更新內容特別多,加上我只有晚上下班後才有時間,所以一篇更新日誌就差不多得一週的時間才能翻譯完。

之所以這麼認真,是我覺得這是一件有意義的事情,更新日誌對於關注和使用 RN 的人來說還是挺重要的,不過最開始做的時候,主要還是因為我也用得著,反正都看了,就順便翻譯了好了,說不定還有人會看。而且眾所周知的原因,如果不仔細研究下到底更新了什麼,就貿然升級版本,那種感受…真的很心累!

劃重點


  • 加強核心元件對 Flow type 的使用
  • ScrollView,CameraRollView 和 SwipeableRow 發生重大變更,在呼叫某些方法時,不再繫結元件例項
  • WebKit 支援雙向 TLS 驗證
  • 從 /assets 之外的目錄提供資源
  • 修復大量奔潰,以及解決了一些意外

新增


通用

  • 增加 publicPath 屬性,以支援從不同的位置載入靜態 assets

Android

  • Bundler 服務支援 Android 系統級屬性 ,使在多個 App 間除錯程式變得更加簡單

  • Native Modules 現在支援在呼叫 promise.reject 的時候新增一個 WritableMap 型別的額外引數 (userInfo)。具體可以檢視 Promise.java 中的實現方法。然後在 JavaScript 中可以通過 Error.userInfo 的方式獲取這個引數。iOS 已經實現該功能。

  • Native Modules 現在將 nativeStackAndroid 屬性暴露給使用 Exception / Throwable 拒絕的promise, 使 Javascript 可以通過 Error.nativeStackAndroid 顯示 Native 的錯誤堆疊資訊。iOS 可以參考 Error.nativeStackIOS。

iOS

  • 將 moduleForName: lazilyLoadIfNecessary 新增到 RCTBridge.h 中,以便按名稱查詢模組並強制載入它們。以及其它對 LazyLoading 大量的改進。
  • 為 WebView 增加 setClientAuthenticationCredential 方法,以便於在開啟 WebKit={true} 時進行雙向TLS身份驗證

修改


通用

  • 加強核心元件對 Flow type 的使用
  • 大量公共元件都轉換為 ES6 類( ScrollView,CameraRollView,SwipeableRow,ProgressBarAndroid,ProgressViewIOS,SegmentedControllIOS,ToolbarAndroid)
  • Flow 版本升級為 v0.86.0
  • metro 版本升級為 v0.49.1
  • jest 版本升級為 v24.0.0-alpha.6
  • fbjs-scripts 版本升級為 v1.0.0
  • folly 版本升級為 v2018.10.22.00
  • 同步 React 版本為 16.6.1
  • 在 Hot Reloding 時清除錯誤訊息(上週五試用了 0.58 後發現 reloading 有時候會失效,可能是這裡出現了 bug)
  • CxxModules 的方法中可以新增兩個 callback 函式了

重大變化

已經轉換為 ES6 元件類中,有些公有方法不再繫結該元件的例項。受此影響的方法有:

在 ScrollView 中:setNativeProps / getScrollResponder / getScrollableNode / getInnerViewNode / scrollTo / scrollToEnd / scrollWithoutAnimationTo / flashScrollIndicators。

在 CameraRollView 中:rendererChanged。

在 SwipeableRow 中:close。

因此,在方法中通過引用這些方法這些方法當做引用通過引用將這些方法作為回撥傳遞給函式已不再安全。元件例項的自動繫結方法是createReactClass的一種行為,我們決定在切換到ES6類時不保留這種行為。

Android

  • 優化 PlatformConstants.ServerHost, PlatformConstants.isTesting 和 PlatformConstants.androidID 的效能

iOS

  • 將 RCTLogWarn() 改為 RCTLogInfo()

移除


  • 移除 UIManager.measureViewsInRect(),因為已經很久沒有人用它了

修復


  • 修復 Yoga JNI bindings 中潛在的可能導致 UI 執行緒停滯的問題
  • 修復在 cxx module 註冊時因 race condition 導致的 crash
  • View 和 Text 的 displayName 返回明確的名字
  • 修復 CLI 執行 react-native init  --help 返回 undefined 的問題
  • 修復 CLI 執行react-native  start 時不識別  --sourceExts
  • 修復 Modal 的 visible 屬性為 undefined 或 null 是仍會意外彈出
  • 修復 VirtualizedList 載入分頁資料時的崩潰
  • 修復在除錯模式下及計算差異 bundle 時,移除一個 module 導致錯誤堆疊資訊的問題

Android

  • 修復移除 root nodes 時導致的崩潰
  • 修復 ReactInstanceManager 中多個 deadlocks 和 race conditions 問題
  • 修復 ReactModalHostView 和 DialogManager 在 dismissing 時出現的 IllegalArgumentException
  • 修復因使用 Android Gradle Plugin 3.2 而導致不能正確的合併資源路徑
  • 修復 HTTP 連線 ontimeout 回撥的問題
  • 當遠端伺服器開始關閉時,正確的將 websocket 關閉
  • 修復 Android SDK16 裝置的相容性問題
  • Image.resizeMode 不再預設為 ScaleType.CENTER,會導致多餘的 padding
  • 修復 Android SDK28 上反向的 ScrollView 不能朝正確方向滾動的問題

iOS

  • 修復某些情況下 inline view 沒有重新開始的問題
  • 修復使用前置攝像頭導致 ImagePickerIOS 預覽和渲染影象不一致的問題
  • 修復 iOS11 及之前的版本上關閉 JSC 時的 race conditions 和 crash
  • 修復 NetInfo 中 _firstTimeReachability 導致的崩潰
  • 修復 inline view 不能正確隱藏的問題
  • 修復 ScrollView 的 offsets 直接引用內容 offsets 導致的奔潰

推薦閱讀:

【0.58】React Native 中文更新日誌

相關文章