【0.42】React Native 中文更新日誌

【0.42】React Native 中文更新日誌

來自專欄 React Native 開發陣營

  • 本文為 Marno 原創,轉載必須保留出處!
  • 公眾號【 aMarno 】,關注後回復 RN 加入交流群
  • React Native 優秀開源項目大全:http://www.marno.cn

一、前言

想必也沒什麼人愛看更新日誌這種東西,所以我直接總結一下好了。整體而言修復了一些以往版本的bug,在Android和iOS平台上各增加了一些無關痛癢小功能。還宣稱提高了檢測屬性變化的效率,因為屬性變化就意味著重新render,所以按官方的說法這次更新是對屬性變化的檢測也更為嚴格了。但到什麼程度,還未知。

至於很多人關心的效率方面,似乎這個版本並沒有太大的提升。畢竟屬於日常升級,所以也是情理之中。

但是亮點還是有:

1.屬性支持百分比參數了,目前僅支持(padding,margin,width,height,minWidth,minHeight,maxWidth,maxHeight,flexBasis)。使用方法:padding:30%

2.init project 的時候,可以選擇創建帶有一些常用頁面的模板工程了。但是目前好像模板還比較少,具體可以看這裡【戳我沒錯】。比較期待這個功能,要是可以支持自定義模板就好了。

差不多就這些,想看詳細內容的可以繼續往下看。想看英文原文的請戳本文最頂部的鏈接。翻譯的比較水,沒人給校正,各位隨意看看就好了!

二、重大變化

iOS/Android雙平台:

  • 優化屬性發生變化時的驗證方式和效率

Android平台:

  • 新創建的應用 windowSoftInputMode 默認的模式發生改變。


    現在所有通過react-native init所創建新項目,在 Android 平台上將 Activity 的 windowSoftInputMode 屬性由之前默認的 adjustUnspecified,改為 adjustResize。通過這種 Native 方式解決 Android 上鍵盤遮擋輸入框的問題,而不再使用JS的解決方式,比如之前用到的 KeyboardAvoidingView組件。

  • 移除 JSBundleLoader.getSourceUrl() 方法。


    如果你使用到了以下API:

    1.JSBundleLoader.getSourceUrl()

    2.ReactInstanceManager.getSourceUrl()

    3.ReactInstanceManager.getJSBundleFile()

    現在必須改為調用:

    1.CatalystInstance.getSourceURL()

    2.JSBundleLoader.loadScript()

  • 移除 RecyclerViewBackedScrollView 組件


    這個組件是很久之前為了解決 scroll-back-when-data-is-added 這個bug而添加的,但是現在已經直接通過ScrollView內部代碼解決了這個問題。

三、新特性

1.iOS/Android雙平台:

  • WebView 組件新增 injectJavaScript 方法

    該方法支持直接向 WebView 組件注入 JS 代碼,但是並不可以用於在頁面載入完後執行 JS 代碼。

2.Android平台:

  • 讓布局動畫遵守樣式中設置的不透明度
  • Text 組件新增 selectionColor 屬性
  • ScrollView組件新增 overScrollMode 屬性
  • 實現自定義基線函數的Java綁定
  • TextInput:避免二次觸發 onSubmitEditing
  • 通過 Native 代碼實現 ScrollView.scrollToEnd
  • 支持從Java同步鉤子調用和返回任意類型
  • Switch 組件支持 tintColor 和 thumbTintColor 屬性
  • Slider組件支持自定義 thumb,track,progress 屬性
  • 為 dynamics 添加 null 檢查
  • 在BUCK文件中添加缺少的導入
  • 引入 FallbackJSBundleLoader
  • 改進在 Text 組件中嵌套組件時的報錯機制
  • 在 pointerEvents 設置後仍允許組件摺疊起來
  • 修改 WebView 的 DomStorageEnabled 屬性默認值為true
  • 允許將 view manager 當做 Native模塊訪問
  • 不需要 DevSupportManager 去創建一個 DevInternalSettings
  • 刪除 ModuleRegistryHolder
  • 使 NativeArray 的消費變為顯式

3.iOS平台

  • 給 AlertIOS.prompt() 方法添加一個 keyboardType 參數
  • 為 RCTEventEmitter 添加使用說明文檔
  • 刪除 RCTExecuteOnMainThread 的棄用警告
  • 在 RCTTouchHandler 中添加新的方式處理並發手勢識別
  • RCTTouchHandler 不再延遲任何觸摸
  • 刪除過期方法 RCTExecuteOnMainThread
  • 在新 bridge 上禁用RCTPerfMonitor
  • 更新 NativeComponentsIOS.md 文檔
  • RCTConvert:不推薦使用NSStringArray typedof
  • 去除 NativeModules 中的 RK/RCT 前綴
  • 添加在app 啟動時開啟 sampling profiler 的選項
  • 為考慮 ABI 兼容性使用 int 代替 NSInterger
  • 停止將未使用的 JS 文件複製到 Pods 文件夾中
  • 在沒有 bundle 時候顯示 redbox
  • 按下重新載入時自動關閉 redbox
  • cannot calculate shadow efficiently 不再會報警告
  • 更好的執行 intrinsicContentSize
  • 將 setFrame, setLeftTop 等方法棄用或者刪除
  • UIManager.measure() 支持任意 zoom 效果下的 view hierarchy
  • 向 JS 提供 Native 運行的環境和參數是測試、開發還是生產環境模式
  • 可以通過配置環境變數禁用 yellow box 警告

4.其他

  • 更新 React 版本到 15.4.1。
  • 為組件的部分屬性添加百分比支持,目前支持(padding,margin,width,height,minWidth,minHeight,maxWidth,maxHeight,flexBasis)。
  • JSC堆捕獲將其他 roots 添加到可視化。
  • 為 ScrollView 和 ListView 添加 scrollToEnd 方法。
  • Packager: 內部增加記錄錯誤的程序。
  • 在 node_modules 下添加 symlinks 作為projectRoots 的一部分。
  • 添加 cell size 到 JSC heap capture visualization。
  • 為 Navigation.Header.BackButton 添加 style 和 imageStyle 的屬性。
  • 可以通過 react-native 命令創建制定類型模板的項目
  • 通過 react-native init 初始化項目時創建README
  • 可以通過 react-navigation 直接創建帶有導航器的項目
  • 通過 Yarn 安裝或卸載包
  • 通過 package.json 腳本運行程序
  • 更快的生成 source map
  • High-perf source map builder
  • 在 AnimatedValueXY 中添加 removeAllListeners 方法
  • 可以控制 image 的緩存策略
  • 支持在Windows上複製到剪貼板
  • 使用 fbjs/lib/invariant 替代 invariant
  • 允許在場景堆棧上設置自定義樣式
  • 將C ++ bridge 移到oss目錄中
  • XHR: support typed arrays for request payloads
  • 通過 NativeAnimated 可以驅動任何數字的屬性
  • 確保文檔的鏈接地址正確
  • 避免在 TextInput 中出現空的 _inputRef
  • 允許在調試器視圖中使用深色背景
  • 當 row 被滑動到關閉的位置時,適當的清除 openRowID
  • 取消 SwipeableQuickActions 中對 action 的最大限制(之前限制為2)
  • 允許長寬比超出父組件的邊界
  • 將 TextUpdate 的padding 信息轉移到 text input 組件上
  • 不限制在大小為0的父組件中使用 absolute 定位子組件

四、修復Bug

1.iOS/Android雙平台:

  • 修復子組件尺寸溢出父組件時該父組件的大小
  • 在 Native 的代碼中修復了 skew transform

2.Android平台:

  • 修復在 dev 模式下 JSC 崩潰問題
  • 修復在 startup 時候拋異常的問題
  • 修復 ListView 滑動阻塞問題
  • 修正在 NativeModulesAndroid.md 文件中的錯別字
  • 修復 UIExplorer 進入破碎狀態
  • 修復調用 webview.postMessage 時拋出 not a constructor in WebView 的問題
  • 修復 TextInput 的佔位字元自定義字體無效的問題
  • 修復 UIViewOperationQueue 中的潛在 NPE
  • 修復在動畫狀態時的組件使用 LayoutAnimation 動畫開始位置錯位
  • 重置 pointerEvents 為空值

3.iOS平台

  • 修復 TextInput 在開啟校正功能後自動回調 onChange() 方法的問題
  • 修復正式版測試用例:添加 -ObjC and -lc++ 測試目標
  • 修復 passThroughTouches
  • 修復 nil TVView on pop
  • 修復在編譯時關於索引類型不正確的警告
  • 通過添加 __unused args 標記來修復其他編譯警告
  • 使 CocoaPods 可用

4.其他

  • 糾正 PixelRatio.md 中的拼寫錯誤
  • 修復在 VerticalSwipeJump 模式下手勢返回方向錯誤的問題
  • 修復 node4 上的打包程序崩潰的問題
  • 修復通過 HTTP 載入 minified bundle 的問題
  • 修復在使用 min-size 約束時換行的計算方式
  • 修復 skew transformation
  • 糾正在 Yoga classes 中的拼寫錯誤
  • 糾正 webview 示例中字元串信息的拼寫錯誤
  • 糾正 ResolutionRequest.js 中的拼寫錯誤
  • 修復在 align-item 或 justify-content 使用center或flex-end時 absolute position 出現的問題
  • 修復導航器場景被錯誤地摺疊
  • 修復使用 margin 時的長寬比不準確的問題
  • 修復 app 無故崩潰的問題(終於修復了!!!)
  • 打破僅在調試環境中發生的無限循環

推薦閱讀:

iOS如何通過推送打開指定頁面
【OSG】Tweak開發:給調音量增加震動反饋
iOS11最新實測,蘋果又新增了哪些功能?
iOS Jailbreaking之後玩什麼?極簡主義者推薦的插件及玩法
iOS 7 的後台多任務 (multitasking) 對比之前有何不同,具體機制是什麼?會帶來什麼變化?

TAG:ReactNative | Android | iOS |