【问题标题】:Understanding React Native Cross Platform了解 React Native 跨平台
【发布时间】:2016-05-31 05:16:17
【问题描述】:

我想构建一个在 Web、iOS 和 Android 上运行的应用程序。

我刚刚按照教程使用 React Native 构建了一个 iOS 应用程序。我的手机上成功运行了该应用。

我最初的理解是“构建一次,到处部署”。当我编辑 index.ios.js 文件时,我很快意识到情况并非如此。

此外,我很清楚不能将源代码从 index.ios.js 复制到 index.android.js,因为许多导入和 API 都是特定于平台的。但是,除此之外,我知道大多数代码库都是平台模棱两可的。

达到我想要的结果的适当方法是什么?

  • 为一个平台构建一个应用程序,比如说index.ios.js
  • 然后复制它并更改平台特定位以适应index.android.js
  • 同样针对传统的“桌面浏览器”呢?是否应该在 React 而不是 React-native 中单独完成?

【问题讨论】:

    标签: javascript reactjs react-native


    【解决方案1】:

    我发现一个设计良好的项目可以在 iOS 和 Android 之间实现较高程度的代码共享 - 在某些情况下为 85-95% - 这取决于应用程序的复杂程度。 .ios.android 扩展之所以存在,是因为能够专门针对每个平台很有用——在创建模块化组件时,有时每个操作系统都会产生不同的挑战,因此您必须重新考虑架构。一个例子是<Picker> 组件,它在iOS 上创建UIPickerView,但在Android 上创建模态Picker 和标签——两者的工作方式略有不同。但总的来说,情况并非如此,至少根据我的经验。

    由于index.js 文件是入口点,因此它充当许多应用程序的路由器,这意味着您希望每个平台都相同 - 所以实际上您可以只为所有平台设置一个index.js .有时可能需要进行特定于平台的初始化和全局分配,这将使单独的方法有用。

    在网络方面,目前没有太多的交叉(尽管希望这会改变)。 React Native 利用了 React 的强大功能,同时运行在 iOS 和 Android 团队设计的原生组件之上,移动端和 Web 之间的差异相当广泛。话虽如此,有一些组件,例如React Swipeable Views,它们可以跨网络和本地工作,这是非常有前途的。但目前两者相当独立 - 一个位于 DOM 上,另一个位于原生 SDK 上,尽管两者几乎共享其他所有内容,这意味着跨平台的技能转移很好。

    【讨论】:

    • 感谢您的精彩解释。所以真的,我可以改为在index.js 文件中构建我的应用程序,并可选择使用.ios.js.android.js 文件来实现特定于平台的功能……理论上,这可行吗?
    • 是的,您当然可以在 index.js 中构建您的应用程序,并可以在 index.ios.js 和 index.android.js 中导入该文件,但某些平台特定的元素可能无法在两个平台上运行,所以您应该尽可能为两个平台制作通用组件。您应该清楚的一件事是 react-native 框架基于“一次学习,随处开发”的方法。
    • @bruh 是的,您应该能够做到这一点,尽可能减少特定于平台的代码。而且我可能应该指出,RN根据平台处理JS文件的选择,因此直接从.ios.js导入是不必要的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    相关资源
    最近更新 更多