React Native 使用啥来允许 JavaScript 在 iOS 和 Android 上本地执行?

Posted

技术标签:

【中文标题】React Native 使用啥来允许 JavaScript 在 iOS 和 Android 上本地执行?【英文标题】:What does React Native use to allow JavaScript to be executed on iOS and Android natively?React Native 使用什么来允许 JavaScript 在 iOS 和 Android 上本地执行? 【发布时间】:2016-02-02 10:17:06 【问题描述】:

React Native 在幕后使用什么来与 iosandroid 交互? Cordova 使用 WebView 在本机容器内有效地显示网页; React Native 是否使用相同的方法?如果不是,它使用什么方法?

【问题讨论】:

【参考方案1】:

正如您所注意到的,React Native 并非基于 Cordova。它不是一个看起来像一个应用程序被塞进 WebView 的网站。

React Native 使用 javascript 运行时,但 UI 不是 html,它不使用 WebView。您使用 JSX 和 React Native 特定组件来定义 UI。

它提供了原生级别的性能和外观,但某些 UI 部分必须针对 iOS 和 Android 单独配置。例如,工具栏完全不同,但两个操作系统的 TextInput 可以相同。

【讨论】:

你如何构建这样的组件?为什么他们在这种情况下谈论 flexbox?如果我想添加组件,我应该了解 Java(或 Objective-C)吗? - 组件与 Cordova 相当,你用 Java 为 android 和 Objective-C 为 iOS 构建它们,搜索 react.parts/native 以获取示例。您还可以像使用 React 一样混合组件来构建其他组件。 - 您可以使用 JavaScript 中定义的 CSS 属性来设置应用程序的样式。他们构建了一个基于 flexbox 的布局引擎来简化这一点。 他们将 Webkit JavaScriptCore 引擎嵌入到框架中。他们在 Android 和 iOS 上使用相同的引擎。 “它提供了原生级别的性能” - 不,实际上它没有。他们在自己的网站上谈论性能问题facebook.github.io/react-native/docs/performance.html 您提供的链接提供了有关性能方面的注意事项的一般提示。我认为没有任何框架 - 包括核心原生 SDK - 你没有类似的列表。【参考方案2】:

运行 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-iosreact-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

【讨论】:

【参考方案3】:

在 iOS 模拟器和设备、Android 模拟器和设备上,React Native 使用 JavaScriptCore,它是支持 Safari 的 JavaScript 引擎。 Source

【讨论】:

以上是关于React Native 使用啥来允许 JavaScript 在 iOS 和 Android 上本地执行?的主要内容,如果未能解决你的问题,请参考以下文章

React-native:允许在 Android 中使用音频的权限

在首先按下不允许后如何授予对 react-native-camera 的访问权限?

允许用户在 React Native/iOS Facebook OAuth 中进行细粒度的权限审批?

React Native with Context API 警告:“允许需要循环,但可能导致未初始化的值......”

React Native TextInput 不允许输入/文本更改

此商家在 react native paytm 集成中不允许应用调用