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