【发布时间】:2016-02-02 10:17:06
【问题描述】:
React Native 在幕后使用什么来与 iOS 和 Android 交互? Cordova 使用 WebView 在本机容器内有效地显示网页; React Native 是否使用相同的方法?如果不是,它使用什么方法?
【问题讨论】:
标签: javascript android ios reactjs react-native
React Native 在幕后使用什么来与 iOS 和 Android 交互? Cordova 使用 WebView 在本机容器内有效地显示网页; React Native 是否使用相同的方法?如果不是,它使用什么方法?
【问题讨论】:
标签: javascript android ios reactjs react-native
正如您所注意到的,React Native 并非基于 Cordova。它不是一个看起来像一个应用程序被塞进 WebView 的网站。
React Native 使用 JavaScript 运行时,但 UI 不是 HTML,它不使用 WebView。您使用 JSX 和 React Native 特定组件来定义 UI。
它提供了原生级别的性能和外观,但某些 UI 部分必须针对 iOS 和 Android 单独配置。例如,工具栏完全不同,但两个操作系统的 TextInput 可以相同。
【讨论】:
运行 Javascript 代码
React Native 在 Android/iOS 模拟器和设备上使用 JavaScriptCore(支持 Safari 的 JavaScript 引擎)。
对于 Android,React Native 将 JavaScriptCore 与应用程序捆绑在一起。
对于 iOS,React Native 使用 iOS 平台提供的 JavaScriptCore。
与 Android/iOS 通信
使用了 React Native 桥(C++/Java 桥)。它负责原生线程和Javascript线程之间的通信。
在大多数情况下,开发人员会用 Javascript 编写整个 React Native 应用程序。要运行应用程序,请通过 CLI 发出以下命令之一 -
react-native run-ios或react-native run-android。此时,React Native CLI 将生成一个节点打包器/捆绑器,它将 JS 代码捆绑到单个main.bundle.js文件中。打包器可以被认为类似于 Webpack。现在,每当启动 React Native 应用程序时,要加载的第一个项目就是本机入口点。 Native 线程产生运行捆绑的 JS 代码的 JS VM 线程。 JS 代码包含应用程序的所有业务逻辑。 Native 线程现在通过 RN Bridge 发送消息以启动 JS 应用程序。现在,生成的 Javascript 线程开始通过 RN Bridge 向本机线程发出指令。这些指令包括要加载哪些视图、要从硬件中检索哪些信息等。 Source
【讨论】:
在 iOS 模拟器和设备、Android 模拟器和设备上,React Native 使用 JavaScriptCore,它是支持 Safari 的 JavaScript 引擎。 Source
【讨论】: