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 在幕后使用什么来与 ios 和 android 交互? 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-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
【讨论】:
【参考方案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 警告:“允许需要循环,但可能导致未初始化的值......”