【问题标题】:React Native using Expo SDK is really native ?! or like cordova使用 Expo SDK 的 React Native 真的是原生的吗?!或像科尔多瓦
【发布时间】:2018-03-02 18:00:21
【问题描述】:

我是 React Native 的新手,我知道使用 react native 开发原生应用程序有两种方法

1- react native init --> 需要编译native cod ==> 结果是 Android 的本机应用程序“需要 Android SDK”和 IOS 的本机应用程序“需要 Xcode”

2- 创建 react native app --> 无需编译原生代码!!

因为 CRNA 使用 Expo_SDK 来访问原生 API,但是:

结果应用真的是原生的吗!或者 Expo Sdk 就像 Cordova 但被 React 使用,如果结果是原生的,Expo 声称结果是原生的!他们是否为 IOS 克隆了 Android Sdk 和 Xcode 或者它是如何工作的?!

【问题讨论】:

    标签: react-native sdk expo


    【解决方案1】:

    Expo 应用是包含 Expo SDK 的 React Native 应用。 SDK 是一个原生和 JS 库,提供对设备系统功能(如相机、联系人、本地存储和其他硬件)的访问。这意味着您无需使用 Xcode 或 Android Studio,或编写任何原生代码,而且它还使您的纯 JS 项目非常便携,因为它可以在任何包含 Expo SDK 的原生环境中运行。

    Expo 还提供 UI 组件来处理几乎所有应用程序都会涵盖但未融入 React Native 核心的各种用例,例如图标、模糊视图等。

    最后,Expo SDK 提供了对服务的访问,这些服务通常管理起来很麻烦,但几乎每个应用都需要这些服务。其中最受欢迎的:Expo 可以为您管理您的资产,可以为您处理推送通知,并且可以构建准备部署到应用商店的本机二进制文件。

    你应该看看the Expo doc

    【讨论】:

    • 我已经知道了,但这只是“什么是世博会”我的问题不同!
    【解决方案2】:

    Expo 应用程序与 React native 一样原生。他们执行以下操作,因此您无需在本地设置 Android / iOS SDK。

    1. 在 Android/iOS 上提供 Expo 应用程序

      这样您就可以在开发过程中构建js代码并使用Expo App进行调试。

    2. 提供构建服务器

      一旦你运行expo build 命令,expo 将上传编译好的 js 代码并在他们的服务器上构建 Android/iOS 文件。您可以从他们的服务器下载构建的文件。

    您可以在 Expo 中 eject,在本地设置 Android / iOS SDK,并像普通的 React Native 应用程序一样构建应用程序

    【讨论】:

      【解决方案3】:

      Expo(和 react-native)应用使用原生(android 和 ios)ui 组件来呈现应用 ui,就像任何原生 android 或 ios 应用一样。因此,它们可以被视为原生应用。

      但是,您的应用程序逻辑是在 javascript 线程中执行的,并且将与本机线程(通过 react-native 桥)进行通信以修改本机 ui 组件。由于桥接器是完全异步的,因此不应影响应用程序的本机 ui 性能。如果您想了解 js 和原生代码之间的通信,阅读this guide 可能是一个好的开始。

      2- 创建 react native app --> 无需编译原生代码!!

      使用 expo 不需要编译原生代码,因为 expo 已经包含 react-native 的“准备使用构建”以及其他几个常见的 react-native 库。在一个 expo 应用程序中,这将与您的 javascript 包一起使用,而不是通过 react-native 桥与已经存在的本机部分进行通信。

      他们基本上只是在滥用这样一个事实,即您可以将不同的 javascript 包注入到预构建的 react-native 应用程序中。 (只要您只使用访问该预构建应用程序的本机功能的子集)

      注意 Appcenters codepush 使用相同的功能,并且它们的设置集成实际上提供了一个很好的示例,即如何在不触及本机部分的情况下加载不同的 javascript 包:

      在 ios AppDelegate.m 这行被修改了:

      原始的 react-native js-bundle 加载始终解析静态包

      return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
      

      使用codepush加载js-bundle,可以解析到不同的js-bunldes

      return [CodePush bundleURL];
      

      Link to full codepush ios integration guide

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-15
        • 2018-04-03
        • 1970-01-01
        • 2016-08-30
        • 2017-03-06
        • 1970-01-01
        • 2018-01-14
        相关资源
        最近更新 更多