React Native 跨平台代码库

React Native cross-platform codebase

Facebook 表示 React Native 建立在学习一次,随处编写 的原则之上,其目标不是编写跨平台代码。

NativeScript,在它们都使用 Node.js 的意义上,它与 ReactNative 非常相似,通过在使用本地组件的文件中编写平台特定代码来提供在多个平台上共享相同代码的能力,这些本地组件不能被分享。它通过简单的命名约定来做到这一点,例如 foo.ios.js

由于 Facebook 尚未发布用于 iOS 以外的其他平台的 React Native 代码。这是他们将来可能会支持的东西吗?

我认为 Android、iOS 和 Web 之间存在太多差异,因此为整个项目构建通用代码库毫无意义。 Android 版本不仅会有原生组件,而且应用程序屏幕和导航的逻辑也会有所不同(iOS/Android/Web 具有完全不同的导航模式)。此外,作为 iOS/Android 项目的一部分,还有许多本机组件,它们会影响应用程序 started/debugged 等的方式,因此最好将 Android 和 IOS 部分保留为单独的项目。

我如何理解(和同情)Facebok 模型:

只要有一个通用功能(在 javascript 中),您可以在不依赖于 react-native views 的情况下将其分离出来,它们将作为单独的组件来实现,可以跨 web/iOS/Android.例如,他们有为 web Facebook 构建的中继库。它抽象出对 Facebook 服务器上开放图数据的访问——完全相同的中继库可以在任何一种环境中使用,因为它不依赖于视图、应用程序逻辑和反应本身。

我非常同意这种方法 - 跨平台的最佳方法是遵循相同的做法:

  1. 让某些东西在其中一种环境中工作
  2. 使其成为独立的、单一用途的库,不依赖于反应、视图、导航逻辑。
  3. 在别处使用库

所以 Android 和 iOS 以及相同 "project" 的基于 Web 反应的应用程序将始终是三个不同的代码库,但它们可能有相当多的共享 javascript 重用库形式的代码。