圖 3-2 React Native 渲染 在 React 框架中,JSX 源碼通過 React 框架最終渲染到了瀏覽器的真實 DOM 中,而在 React Native 框架中,JSX 源碼通過 React Native 框架編譯後,通過對應平台的 Bridge 實現了與原生框架的通信。如果我們在程序中調用了 React Native 提供的 API,那麼 React Native 框架就通過 Bridge 調用原生框架中的方法。 因為 React Native 的底層為 React 框架,所以如果是 UI 層的變更,那麼就映射為虛擬 DOM 後進行 diff 演算法,diff 演算法計算出變動後的 JSON 映射文件,最終由 Native 層將此 JSON 文件映射渲染到原生 App 的頁面元素上,最終實現了在項目中只需要控制 state 以及 props 的變更來引起 iOS 與 Android 平台的 UI 變更。 編寫的 React Native代碼最終會打包生成一個 main.bundle.js 文件供 App 載入,此文件可以在 App 設備本地,也可以存放於伺服器上供 App 下載更新,後續章節講解的熱更新就會涉及到 main.bundle.js 位置的設置問題。
在與原生框架通信中,如圖 3-3 所示,React Native 採用了 JavaScriptCore 作為 JS VM,中間通過 JSON 文件與 Bridge 進行通信。而如果在使用 Chrome 瀏覽器進行調試時,那麼所有的 JavaScript 代碼都將運行在 Chrome 的 V8 引擎中,與原生代碼通過 WebSocket 進行通信。