1. 程式人生 > >2018年 React Native

2018年 React Native

自從上次釋出關於React Native的更新狀態已經有一段時間了。

在Facebook內部,我們將React Native技術應用到更多的重要專案中。我們最受歡迎的產品之一是Marketplace,作為我們的頂級應用,每月有8億人使用。自2015年構建以來,Marketplace已完全使用React Native構建,共計超過100個檢視(頁面)。

我們也在應用的許多新部分使用 React Native。如果您看了上個月的F8主題演講,就會發現 Blood Donations、Crisis Response、Privacy Shortcuts 和 Wellness Checks 的所有新功能都是使用 React Native 構建的。Facebook 主應用以外的專案也在使用 React Native。新的 Oculus Go VR 頭戴式裝置對應的

移動應用程式 就完全使用 React Native 構建。

當然,我們也使用許多其他技術來構建我們的應用程式。LithoComponentKit是我們在應用程式中廣泛使用的兩個庫;React Native 的目標從來都不是替代其他技術,專注於 React Native 自身,努力使之變得更好,但依舊希望看到其他團隊從 React Native 中得到一些想法或靈感,例如將instant reload(即時過載)運用到非 JavaScript 程式碼中。

架構

當我們在2013年啟動React Native專案時,React Native 專案的設計初衷是成為 JavaScript 和原生應用之間的一個非同步,序列化和批處理的“橋樑”。
React DOM 將 React 的狀態更新變成了命令式、可變的 DOM API 呼叫,如 document.createElement(attrs)

.appendChild(),而 React Native 則返回一個單獨的 JSON 訊息,它列出了要執行的一些操作,如 [["createView", attrs], ["manageChildren", ...]]。就像React DOM將React狀態更新變成命令式的,對document.createElement(attrs)和.appendChild()等DOM API的可變呼叫一樣,React Native被設計為返回一個列出要執行的突變的JSON訊息,如[[“createView “,attrs],[”manageChildren“,...]]。 我們將整個系統設計為永不依賴獲取同步響應,並確保列表中所有的內容都可以完全序列化為 JSON,並可以反序列化回來。這樣做是為了提高靈活性:在這個架構之上,可以構建像
Chrome 偵錯程式
之類的工具,這些工具可以通過 WebSocket 連線非同步執行所有的 JavaScript 程式碼。

在過去的五年裡,我們發現最初的設計原則加大了某些特性的開發難度。非同步橋接(asynchronous bridge)意味著不能直接將 JavaScript 邏輯與很多原生 API 整合在一起,因為這些原生 API 是同步的。批量橋接(本地呼叫佇列)意味著 React Native 應用程式呼叫本地函式會更加困難。而且序列化的橋接意味著不必要的複製,因為它不是直接在兩個世界之間共享記憶體。對於完全使用 React Native 構建的應用程式,這些限制通常是可承受的。但對於在 React Native 與現有原生程式碼之間進行復雜整合的應用程式,就非常糟糕了。

因此,Facebook 正在對 React Native 進行大規模重構,讓框架變得更加靈活,並更好地與JavaScript / 原生混合應用中的原生基礎設施整合。 通過這個專案,將應用在過去 5 年中學到的知識,逐步讓架構走向現代化。我們正在重構 React Native 的核心部分,大部分工作都是在底層進行的,
現有的 React Native 應用程式幾乎不需要做出更改

為了使 React Native 更輕量化並能更好地適應現有的原生應用,此次重構主要從三個方面進行。首先,我們改變了執行緒模型:UI 更新不再需要在三個不同的執行緒上執行,可以在任意執行緒上同步呼叫 JavaScript 進行優先更新,同時將低優先順序工作推出主執行緒,以便保持對 UI 的響應。其次,將非同步渲染功能引入 React Native 中,允許執行多個渲染並簡化非同步資料處理。最後,簡化橋接,讓它更快、更輕量。原生和 JavaScript 之間的直接呼叫效率更高,並且可以更輕鬆地構建除錯工具,如跨語言堆疊跟蹤。

完成以上工作之後,將帶來更緊密更合理的整合。現在,如果不通過複雜 hack 的手段就無法讓原生導航和手勢處理或原生元件(如 UICollectionView 和 RecyclerView)一起工作。在對執行緒模型做出更改之後,我們將可以直接構建這樣的功能。

當這個專案將要完工時,Facebook 會披露更多的細節,敬請期待。

社群

除了Facebook 內部社群外,我們很高興在Facebook之外擁有蓬勃發展的React Native使用者和合作者。 我們希望與React Native社群有更多的溝通與支援,以此能更好地為React Native使用者提供服務並讓開發者更易於做出貢獻。

React Native底層體系結構的更改將有利於與其他原生基礎架構更加簡單地進行互動操作一樣,React Native在JavaScript端應該更加簡單輕度,以更好地適應JavaScript生態系統,包括VM和bundler之間的通訊交換。我們知道變革的步伐很難跟上,所以我們希望找到減少頻繁釋出新版本的方法。 最後,我們知道現有的文件缺少關於啟動優化等諸多方面的內容,這些情況將在未來一年中有所改善。

如果您使用的是React Native,那麼您就是我們社群的一部分; 請將您使用React Native的困惑反饋給我們。

雖然React Native只是移動開發者工具箱中的一個工具,但我們對其有充分的信心與支援 - 我們每天都在改進,去年有500名貢獻者提交了超過2500次提交。

相關推薦

2018 React Native

自從上次釋出關於React Native的更新狀態已經有一段時間了。 在Facebook內部,我們將React Native技術應用到更多的重要專案中。我們最受歡迎的產品之一是Marketplace,作為我們的頂級應用,每月有8億人使用。自2015年構建以來,Marketp

2018React全家桶+AntD 共享單車後臺管理系統開發(完整版)最全

第1章 課程導學 對課程整體進行介紹,並且說明學習的必要性。 1-1 課程導學 對課程整體進行介紹,並且說明學習的必要性。 第2章 React基礎知識 2-1 React基礎介紹 2-3 React生命週期介紹 詳細介紹了初始專案的外掛安裝、主題定製以及主頁面結構設計。 3-2 基礎外掛安裝(

2018慕課網視頻教程(vue、react,docker、python、java、Go語言)

java、 tom 深度 面試 銷售 拉勾網 react code python升級 如需下述哪一個課程,加QQ: 3475362830,非免費,幾大洋,非誠勿擾! Go語言實戰流媒體視頻網站基於Golang協程實現流量統計系統Google資深工程師深度講解Go語言 jav

2018.10月,搭建windows下的React Native開發環境

我是根據react native中文網教程https://reactnative.cn/docs/getting-started.html進行搭建 react native必須安裝的依賴有:Node、React Native 命令列工具、Python2 以及 JDK 和 Android St

最詳細React Native環境配置及專案初始化(2018-10-14)

注意配環境一定要全程使用穩定VPN工具,否則會浪費大量時間!!!相信我 一.截止到專案初始化之前也就是執行這條命令之前都按官網的方法就可以 https://reactnative.cn/docs/getting-started.html react-native ini

React Native年度報告(2017-2018)

期待已久的新課上線啦!解鎖React Native開發新姿勢,一網打盡React Native最新與最熱技術,點我Get!!! 概述 在過去的一年中React Native經歷了從v0.40到v0.52的十幾次的版本迭代,我們看到在這十幾次的版本迭代中React N

react-native 開發環境搭建(寫於2018-12-31)

開始絕對有必要寫這個:太多坑了; 開發環境: win7 64位   目標環境 android;  1.第一步按照 react-native中文網 安裝; 需要注意的是,就是你通過國內地址下載好android studio (截止目前最新版本 3.2.0);如果沒有穩定的vpn

iOS 2018最新搭建 React Native 開發環境教程

一、ReactNative簡介 ReactNative是移動端目前最熱的框架之一, 著力於提高多平臺開發的開發效率 —— 僅需學習一次,編寫任何平臺。(Learn once, write anywhere)。Facebook 已經在多項產品中使用了Reac

React Native iOS詳細打包步驟(2018.04更新)

1.在自己專案的ios資料夾下新建一個資料夾取名bundle(ps:ios資料夾和node_modules資料夾在同一級目錄下,這個bundle資料夾名稱隨意取,後面要用到,但是記得在相應地方改一下就好了) 2.為了方便,將打包命令寫到專案package.json檔案裡,

JavaScript 年度調查報告:React、Vue 和 Angular 三分天下,誰將在 2018 獨佔鰲頭?

關鍵時刻,第一時間送達! 要論 2017 年最主流的三個 Web 前端框架,應莫過於 Angular、Vue 和 React 了。然而在實際應用中,這三個框架卻不盡相同,對於規模不大的前端專案來說,Vue 因其極易上手會被列出首選之位,Angular 在快速開發大型 We

2018,如何成為一名React Native開發者?

隨著移動端開發和React的流行,越來越多的人想要學習React Native。本文將向你推薦一些自學React Native的懇切建議,介紹一些關於React Native的學習資源,並推薦一些簡單實用的開發工具。相信只要按照本文所述的方法實踐,你一定能更快速

關於Webstorm運行react-native中的Android項目出錯的解決辦法

tor per ive studio 解決 出錯 nat sdk 關於 復制使用androidstudio創建的項目中的local.properties文件至android目錄下 或者直接在android目錄下創建local.properties文件 ndk.dir=D\:

React Native環境配置之Windows版本搭建

services 就會 wrapper function 新建項目 之前 path ont 系統 接近年底了,回想這一年都做了啥,學習了啥,然後突然發現,這一年買了不少書,看是看了,就沒有完整看完的。悲催。然後,最近項目也不是很緊了,所以抽空學習了H5。自學啃書還是很無趣的

React-Native在gitHub下載的Demo不能運行問題!!!

2.4 ida 項目路徑 正常 use native clas log 設置 1、目前找到的最可行的運行React-Native Demo的解決方案 請參考:http://blog.csdn.net/shubinniu/article/details/52873250

React Native - 3 View, Text簡介以及onPress & onLongPress事件

分享 關鍵字 添加 res com ive img src 解釋 我們要生成如下的構圖 直接上圖,不解釋。 如下圖所示,定義函數,函數之間不需要逗號,在元素上添加事件,使用關鍵字this.{function name}

React-Native集成到已有項目中的總結

could not rom 浮窗 js文件 命令行 led align nba handle 安裝Python 從官網下載並安裝python 2.7.x(3.x版本不行) 安裝node.js 從官網下載node.js的官方V6.X.X版本或更高版本。安裝完成後

Angular團隊公布路線圖,並演示怎樣與React Native集成

content ogl date pda andro 演講稿 服務 團隊 stat 本文來源於我在InfoQ中文站翻譯的文章,原文地址是:http://www.infoq.com/cn/news/2015/06/angular-2-react-native-roadmap

react native 學習之 native modules

每一個 nsstring類 了解 lba 執行過程 span nsnumber 開發 github 翻譯自https://facebook.github.io/react-native/docs/native-modules-ios.html Native Module

React Native Networking API

second tps console 操作 信息 wait quest await pro p.p1 { margin: 0.0px 0.0px 2.0px 0.0px; font: 14.0px "Helvetica Neue"; color: #454545 } p.p

React Native中的DeviceEventEmitter.addListener與DeviceEventEmitter.emit

ice navigator 訂閱 shu reac 如何 沒有 解釋 http   官方文檔沒有對這兩個方法做很好的解釋,需要自己找資料研究。看了幾篇文章,總結是和訂閱發布模式差不多,用來事件監聽發送的。 React Native學習之DeviceEventEmitter傳