【问题标题】: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 是否使用相同的方法?如果不是,它使用什么方法?

【问题讨论】:

    标签: javascript android ios reactjs 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-01
        • 2010-11-28
        • 2021-05-26
        • 2016-10-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多