为什么我们不能在 React Native 中只使用一个公共基础 class?

Why can't we just use a common base class in react native?

在 react-cli 创建的 react native 示例代码中:

https://github.com/facebook/react-native

我们看到 index.ios.jsindex.android.js 都有完全相同的代码。

我做了一些重构并将这段代码提取到一个通用的 index.base.js 文件中,然后为每台设备重新导入和导出它,它就可以工作了。谁能告诉我为什么首先存在这种重复?

我知道有些组件是特定于每个设备的,但老实说,我不明白为什么 React Native 被吹捧为 'learn once and deploy anywhere',而我刚刚做了这个重构,你实际上可以共享相同的组件如果您愿意,可以在每个设备上对代码进行分级。

您可以只有一个 index.js,事实上,最好在可能的任何时候通过单独的 .ios.js.android.js 文件这样做。

示例代码试图向您展示,当您需要时,您可以创建这两个文件,并在每个平台上加载正确的文件。

如果平台特定代码只是组件的一小部分,您仍然可以将其放入一个 .js 文件中,并使用 Platform 模块根据平台更改行为。

import {Platform} from 'react-native'

...

const message = Platform.OS === 'ios'
  ? 'Hello, iOS user!'
  : 'Hello, Android user!'

在 React Native 文档中查看有关 platform specific code 的更多信息。