【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 |