了解反应原生

时间:2017-01-19 20:47:03

标签: reactjs react-native code-push react-native-code-push

我开始为iOS和Android构建react本机应用程序。我已经阅读了本机应用程序的文档,但现在有一件事我不明白:

react-native app是否完全是原生应用程序?

他们在反应原生中说,它会是。那我为什么问这个问题呢?好吧,我找到了通过https://github.com/Microsoft/react-native-code-push提出问题的理由。根据代码推送,他们能够动态更新应用程序。这是通过更新应用程序的javascript部分来完成的。但是等等,如果应用程序是真正的本机应用程序,那么在应用程序的最终版本中应该没有任何javascript,我是对的吗?那么他们是怎么做到的呢?他们是在代码推送服务器上编译应用程序,然后将编译后的应用程序发送给用户还是什么?这真的让我感到担心的是,本机应用本身并不完全是原生应用。

  

CodePush插件可让您的JavaScript和图像与发布到CodePush服务器的更新保持同步,从而有助于在最终用户面前立即改进产品。通过这种方式,您的应用可以获得离线移动体验的好处,以及一旦可用,就可以获得侧面加载更新的“类似网络”的敏捷性。这是双赢的!

此外,我怀疑这是因为他们在代码推送文档中也说,他们无法更新本机应用程序的本机部分:

  

注意:任何触及本机代码的产品更改(例如,修改AppDelegate.m / MainActivity.java文件,添加新插件)都无法通过CodePush分发,因此必须通过相应的商店进行更新。

如果react-native app完全是原生的,那么最后所有代码都应该是本机代码。所以我真的不明白为什么更新本机本机代码比编译为本机代码更难?

1 个答案:

答案 0 :(得分:2)

  • 如果只更改/src/文件夹(JS代码)中的代码和而不添加本机模块 您可以使用 CodePush 来更新您的应用。

  • 如果您更改/src/文件夹(JS代码)添加某些原生模块中的代码,则无法解决问题使用 CodePush 更新您的应用程序。

您的JS代码由本机组件编译和读取。这就是为什么你可以更新JS层的原因。

如果您查看.ipa文件并打开main.jsbundle (需要取消启用),您可以看到您的JS代码。例如:

enter image description here