【0.47】React Native 中文更新日誌

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

1、導讀


此次更新翻譯的慢了一點,由於最近事情比較多,但願你們諒解,畢竟我都是在用業餘時間作這些。若是想第一時間獲取 RN 中文更新日誌,也能夠關注個人公衆號。html

言歸正傳,此次更新最多的內容就是分包的變化,對性能的優化比較小,由於原理就是那樣,不管在怎麼優化都不可能突破原生和 JS 之間這道障礙,不過通過這幾回不斷的分包,代碼結構看起來更清晰了,並且隨着功能愈來愈大,也須要這樣的方式去優化管理。java

此次更新在 Android 增長了對 Kotlin 模塊的 link 功能,算是對上次更新遺留問題的彌補,這也說明一個問題,無論你願不肯意, Kotlin 已經被愈來愈多的人接受了。react

對了,順便說一下,仔細的人應該早就發如今 Libraries 包下有一個 Experimental 的包,裏面包含了一些實驗性的組件,包括一些側滑組件,按鈕之類的,感興趣的能夠本身下載源碼看下。可是實驗性組件,你懂的!android

PS:更新有風險,嚐鮮需謹慎。我的以爲除非十分必要,不然沒有必要常常更新 RN 版本。ios

2、通用


2.1 重大變化git

  • 移除再也不使用的 createJSModules 方法(Android)github

    如今不用特地聲明要提供哪一個 JS 模塊給 native 了,因此將 createJSModule 方法完全移除了,可是仍能夠按照以前的方式來調用 JS 模塊。web

  • 修正字體 weight 屬性的(iOS)react-native

    以前設置 weight 的屬性值爲 「300」或者 「200」 ,通過計算後都會按照 Roboto-Thin 樣式來處理,這致使這兩個值呈現的效果同樣,如今已經將這一問題修復。xcode

2.2 修復 Bug

  • VirtualizedList: 修復因爲過早調用 _updateCellsToRender 方法帶來的問題
  • VirtualizedList: 優化渲染時間計算方式
  • VirtualizedList: 修復當沒有設置 getItemLayout 方法時引發的渲染問題
  • CLI: Fix broken default getProjectRoots
  • 修復類文件中聲明證書的註釋格式(以前只多了個【*號】)
  • Fix deepFreezeAndThrowOnMutationInDev-test for Node v8.1.0
  • 修復 invariant 的引用路徑
  • Fix configure glog script when building from xcodebuild
  • 修復在 Geolocation.js 中調用 warning 方法時缺乏第一個參數致使的錯誤

2.3 新特性

  • 在官網的側邊菜單中的 Guides 分類下添加一欄:Components and APIs(改版快主要是將現有組件和 API 進行了分類整理)
  • 添加 marker 來標記整個 native 模塊建立的過程
  • 在官網側邊菜單 Guides 下 Images 中添加關於自定義 require 類型的文檔介紹
  • 向 RN CLI 服務端添加 https 選項
  • 使 VirtualizedList 支持同一方向的嵌套滾動。
  • Add --maxWorkers flag and allow transformers to run in-band
  • FlatList: 在 Dev 模式下增長對 getItemLayout 返回對象的屬性數量的校驗,便於咱們在開發時能快速定位因爲對象缺乏屬性致使的問題
  • FlatList: 添加 setNativeProps 方法,能夠直接對 native 屬性進行設置
  • 當同時設置了 pagingEnabled 和 snapToInterval 屬性時會報警告
  • 爲 SwipeableRow 組件(實驗性組件)添加了 close 方法
  • 添加一個新的 babel 轉換器用於 inlining regenerator-runtime per file
  • 將 Wix.com 添加到官網的 showcase 中
  • 移除 react-native/packager 文件夾

    由於 RN 更換了新的打包工具 metro-bundler,這個工具是 FB 專門爲 RN 設計的 JS 打包機,聽說比以前用的 packager 更快了,感興趣的能夠到 github 看下,網址:github.com/facebook/me…

  • Docs:更新了官網中側邊菜單 The Basics 板塊中 Handling Touches 下的教程,更便於初學者理解 RN 的 Touch 時間。
  • Docs: 修改了官網側邊菜單一些模塊的排序
  • 在儘量多的地方默認禁用 auto-mock
  • 從 local-cli 中移除 worker
  • Promise support for C++ bridge
  • 給 VirtualizedList 和 FlatList 添加 progressViewOffset 方法,目的爲了正確的顯示上拉加載動畫
  • Implement Systrace integration for Fiber
  • 添加判斷 global.performance 確實爲空時才進行覆蓋
  • 將關於 uglify 和 babel 的類型定義從 React Native 中移到了 Metro Bundler 中
  • 清理 local-cli/core/tests
  • 修復在 Node v8 時使用 mock-fs 形成的問題
  • 修改了以前更新時沒有修改到的一些 PropTypes 的引用

    記得不少人下載一些開源的項目,運行時會提示 PropTypes 找不到,由於 FB 將 PropTypes 移到了另外一個包,因此會找不到,看下以前的更新日誌裏有提到過的。

  • 改進 ,這是上次更新添加的組件,若是不清楚怎麼使用,能夠看下上次的更新日誌。
  • 移除了 retainLines 和 sourceMaps 選項
  • jest、jest-repl、jest-runtime 版本更新到 20.0.4
  • 更新 guidelines
  • 將 preset 變成一個函數來處理不一樣的開發者設置
  • 將 Native Animated 中 x.makeNative 的調用調到 super.makeNative 以前
  • 修改語法,使用 'its' 代替 'it's'
  • Yoga: 若是使用了 flex,那麼其總和最小爲 1
  • Yoga: 當設置了 display:none 時,中止渲染子節點
  • Yoga: 在 display 屬性中添加 flexnone 的屬性值
  • ImageBackground: 用 StyleSheet 中緩存的樣式代替直接在 style 中設置屬性對象,以提升渲染性能。
  • 在文檔中添加內容,說明在 Android 上暫不支持keyboardWillShowkeyboardWillHide 屬性。
  • 給 debugger.html 添加音頻,以保持在 Chrome 中調試 RN 應用時 tab 的優先級
  • 在 react-native 中提供方法獲取 unstable_batchedUpdates
  • 當設置了 sticky headers 時禁用子組件 clipping
  • 使用 create-react-class 包中的 createReactClass 取代某些官方組件中的 React.createClass
  • 控制 Metro 是否調用 Babel 去查找 .babelrc 文件
  • 中止在 JSTimers 使用 Map
  • 將 JSTimersExecution 合併到 JSTimers,並刪除對 JSTimersExecution 的引用。
  • 容許無參的 rejection 回調
  • 修復 TextInputState 類中 blurTextInput() 方法註釋中的錯別字
  • 重構了 Button.js 中的代碼,使邏輯更清晰
  • 設置 bridge 能夠爲共享:容許 native 模塊在 init 後再註冊
  • 使用 prop-types 包中的 PropTypes 代替 react 中的 PropTypes
  • 將 Executor 重命名爲 JSExecutor
  • 修改文檔中在 Windows 安裝開發環境的 choco 命令(縮短語法)
  • 像 app component 添加一個可選的 wrapper component
  • Jest Mocks for NetInfo and Linking
  • 在 Yoga 中檢測組件是否溢出

3、Android


修復 Bug

  • 修復 ReactArt 中的繪製弧線計算的問題
  • 修復當沒有獲取到 Window 權限時程序奔潰的問題
  • 修復 dev 加載指示器
  • 修復 ReactInstanceManager.java 中的 package 順序

新特性

  • 在文檔中指明 Android 目前不支持 overflow: hidden 屬性
  • 添加 cmd+opt+ctrl+D 命令以便全局調用 dev menu
  • 添加 dev bundle 下載監聽器,方便咱們在 bundle 加載的時候能夠顯示進度,該功能也主要是爲了 Expo 顯示加載進度的。
  • 爲 AndroidViewPager 增長 peeking(偷看) 功能

    不少 App 的 banner 都用這種設計,在 Android 上用 ViewPager 實現比較簡單,如今官方也正式提供這個屬性了。用語言描述的話,大概就是在本頁會露出下一頁的一邊。

  • 在調用同步 native 模塊時的錯誤信息中顯示 Java 堆棧信息
  • 在文檔中說明如何從 Android 的 asset 目錄中讀取圖片資源 source={{uri: 'asset:/foo.png'}}
  • 控制檯 link 命令支持編譯用 Kotlin 開發的 Android 模塊了
  • 容許添加多個 bridge 監聽器
  • 在 ReactInstanceManager.java 類中增長 log 日誌打印
  • 移除 SetBuilder 這個類
  • 使用非零的實例化的 key 來標記 INITIALIZE_MODULE 標記
  • 只加載一次核心模塊
  • 將代理 server 中標識 host 和 port 的常量分離開,以前IP和端口保存在一個常量中,如今拆分開了。
  • 在 ReactRootView 中調用 removeOnGlobalLayoutListener 時先判斷 Android SDK 的版本
  • 將 packages 拆分到 core bridge 和 core RN 中
  • 再也不容許 multipart bundle 的傳送
  • 將 getConstants 中的 NativeArray 轉換成 NativeMap

4、iOS


修復 Bug

  • 修改 iOS 上 WebView 的屬性 scalesPageToFit 默認值爲 true,該屬性表示是否自動放大頁面內容以適應瀏覽器窗口大小
  • OSS build:使用 #import "..." 代替 #import
  • 修復在 Apple TV 上的編譯錯誤
  • 修復在開啓 JS debugger 的時候不 timer 不Fix timers 不運行的問題
  • 修復在沒有 executor 時訪問 jsContextRef 形成的奔潰問題
  • 修復調用 AccessibilityManager.setAccessibilityContentSizeMultipliers 時的奔潰問題
  • 修復在 separate bundles 中引用過期資源的問題
  • 修復當組件 height/width 設置爲 0.5dp 時會被四捨五入成 1dp 的問題
  • 修復 installGlobalFunction 方法的可見性
  • 將單行 的 blurOnSubmit 屬性默認值設置爲 true

新特性

  • 在文檔中增長如何獲取 iOS 系統版本的說明
  • 根據 Apple 官方指導修改在 iOS 上的藍色的默認值,從 #0C42FD 改成 #007AFF
  • 使 RCTPackagerConnection 和 RCTSamplingProfilerPackagerMethod
    再也不依賴 RCTBridge
  • 修復頭文件中使用 CocoaPods/Xcode 導入文件時路徑錯誤的問題
  • 從 OSS React Xcode 項目中移除無用的 folly/File.{h,cpp}
  • 提供 content-available APS key 用於 iOS 靜默推送

    在 iOS 上若是想要發送一個調靜音的推送消息,必須設置 content-available 的值爲 1

  • 在 RCTShadowView 中不容許插入子組件
  • 支持 display: none 屬性
  • 實現 nativeID 屬性以便使 native 代碼能夠引用 react 管理 views
  • 添加 presentationStyle 屬性控制 的表現方式,以便對大屏有更好的支持,如 iPad 和 iPhone7 plus 等
  • 刪除再也不使用的 RCTRenderingPerf
  • 爲 RCTUITextField 增長 editable 屬性
  • 將 RCTTextView 中的 placeholderText 屬性重命名爲 placeholder
  • 增長 RCTBackedTextInputViewProtocol ,以便外部組件訪問輸入狀態
  • RCTTextInput: 將通用的佈局相關的邏輯代碼移到了基類中
  • 添加 keyboardType 和 returnKeyType 屬性

    當用戶輸入數字的時候,鍵盤沒有提供 Done 或 Enter 按鈕,因此增長 returnKeyType 屬性,方便咱們提供收起鍵盤的方式,以提升用戶體驗

  • 容許 RCTModuleData 明確的選擇退出執行其建立的主隊列
  • 將 RCTAnimation 和 RCTLayoutAnimation 與 RCTUIManager 解耦
  • 新方式去實現 RCTUITextField 的 editable 和 non-editable 屬性
  • ScrollView: 添加屬性 DEPRECATED_sendUpdatedChildFrames 來控制是否調用 updatedChildFrames 來刷新數據
  • 處理 Chrome debugger 拋出的致命性錯誤
  • 容許上傳視頻

    以前若是選擇相冊中的視頻進行上傳,會讀取視頻第一幀看成圖片上傳;如今會判斷所選文件的後綴名,若是是 *.mov 則會看成視頻上傳。

  • 若是 bridge 無效則在 websocket 執行器啓動時就報錯
  • TextInput: 固定單行 的 textWasPaste 屬性的返回值爲 YES
  • 更新文檔中 podspec 集成說明

相關文章
相關標籤/搜索