React Native 0.59.x新特性解讀
概述
眾所周知,在現在的前端技術開發棧中,跨平台開發是一個重要的課題,不管是老牌的Hybird還是最近流行的RN、Weex還是Flutter,不得不說,現在前端和客戶端的界限越來越模糊。
最近在寫《React Native跨平台開發進階》一書,也是對之前的《React Native移動跨平台開發實戰》的升級(ps,由於之前的寫作功底較淺,所以寫的並不是很好)。最近,RN發布了 0.59.x 系列版本,可以發現上層設計出現了比較大的調整,經過體驗之後,就想聊聊RN新版本的升級體驗和新特性。
相信從事移動開發的同學都清楚,最近兩三年來,跨平台開發的技術可以說是越來越盛行,前端和客戶端的界限也越來越模糊。我對RN的認識是2016年攜程的一次技術分享,當時只是覺得使用js來寫客戶端很快,雖然當時的性能並不是很好,抱著擁抱新技術的態度,我在跨平台的方向上也越走越遠、越走越深。
曾經,Aribnb 的 「為什麼 Airbnb 放棄了 React Native」 讓我一度懷疑RN是不是要涼涼了,不過好在Facebook 並沒有放棄 RN,甚至官宣《Facebook 正在重構 React Native,將重寫大量底層》 ,雖然重構後的RN還沒有對外發布,但是可以遇見,重構後的RN將變得越來越好。
最近,Facebook更新了最新版本0.59.4,新版本主要更新了以下新特性: 1、減輕了 React-Native 自身框架,將 webView 、viewPager、netinfo、async-storage 等內置包拆分,通過社區獨立維護,並逐步模糊 React 和 React-Native 的界限。 2、更新 JavaScriptCore 、upgrade 和 CLI 工具。 3、支持 React Hooks 。 4、修復了 FlatList 等列表控制項中的諸多問題。
按照這一趨勢,未來React Native還將在以下方便加大力度: 1、減輕 JSBridge 的依賴。 2、通過 Fabric UI架構,將 Shadow 層、 UIManager 、NativeModule 從 Java 移到 C++ 中,從而支持 雙向的同步和非同步渲染與調用 。
關於這方面的精簡的知識,大家可以參考京東的 《庖丁解牛!深入剖析 React Native 下一代架構重構》和攜程的 《攜程開源RN開發框架CRN》
新特性
在0.59.0版本發布以來,RN最近都在經歷小版本的迭代,最近的版本為0.59.4。在0.59.x版本中主要有一些新的功能和特性:
React Hooks
React Hooks 是此版本的一部分,它允許跨組件重用有狀態邏輯。Hooks的內容可以參考下面的內容: Introducing Hooks:解釋了為什麼在 React 添加 Hook。 Hooks at a Glance:對內置 Hooks 的快速預覽。 Building Your Own Hooks:演示了使用自定義 Hooks 重用代碼。 [**]Making Sense of React Hooks](medium.com/@dan_abramo…):探索了 Hooks 解鎖的新可能性。 useHooks.com:展示社區維護的 Hooks 清單和 demo。
JavaScriptCore
React Native 使用新的 JSC(JavaScriptCore)為應用程序提供支持。眾所周知,Android 上的 JSC 已經存在了幾年,這意味著很多現代 JavaScript 功能都不受支持。更糟糕的是,與 iOS 的現代 JSC 相比,它表現不佳。隨著這個版本的發布,Android的JSC將帶來革命性的改變。 並且在 @DanielZlotin,@ dulmandakh,@ gengjiawen,@kmagiera 和 @kudo 等大神的努力下,Android 的 JSC 還將支持 64 位晶元,同時性能也大幅改進。
更快的啟動與內聯需求
新版本帶來了更高的性能,因此應用的啟動速度更快,這是因為新版本允許開發者根據需要載入資源。此功能稱為「內聯需求」(inline requires),因為它允許 Metro 識別延遲載入的組件。並且具有深入和多樣化組件架構的應用程序將獲得最大的改進。