React Native跨平台代码库

3

Facebook表示,React Native基于“一次学习,到处编写”的原则,并且它的目标不是编写跨平台代码。

NativeScript与React Native非常相似,因为它们都使用Node.js,通过编写使用无法共享的本地组件的特定于平台的文件来实现在多个平台上共享相同的代码。 它通过简单的命名约定实现,例如foo.ios.js

由于Facebook尚未发布适用于iOS以外其他平台的React Native代码,这是否是他们未来可能支持的功能?


从技术上讲,它们都使用Node.js - React Native不使用NodeJS。 - Benjamin Gruenbaum
@BenjaminGruenbaum:好吧,他们在要求下列出了它,所以看起来他们确实使用Node.js。 - dan-klasson
1
Node.js 用于开发,而不是作为实际引擎。React Native 使用 JavaScriptCore,而 NativeScript 在 iOS 上使用 JavaScriptCore,在 Android 上使用 V8。 - Emil Oberg
1
请参考此帖子了解如何在React Native跨平台共享代码:https://dev59.com/YJnga4cB1Zd3GeqPUCOm#38510985 - Anthony Tietjen
1个回答

3
我认为Android、iOS和Web之间的差异太大了,因此为整个项目构建通用代码库意义不大。Android版本不仅具有本地组件,还具有应用程序屏幕和导航逻辑不同(iOS/Android/Web都有相当不同的导航模式)。此外,iOS/Android项目中有许多本地组件,它们影响应用程序的启动/调试等方面,因此将Android和IOS部分作为单独的项目保留可能会更好。
我理解并支持Facebook的模型:
每当有一个通用功能(在JavaScript中)可以分离出来,而不依赖于React-Native视图时,他们会将其作为单独的组件进行开发,以便在Web/iOS/Android上重复使用。例如,他们为Web Facebook构建了Relay库。它抽象了对Facebook服务器上的开放图形数据的访问-完全相同的Relay库可以在任何环境中使用,因为它不依赖于视图、应用程序逻辑和React等内容。
我非常赞同这种方法-跨平台的最佳方式是遵循相同的实践:
1. 在其中一个环境中使其工作 2. 将其制作为独立的、单一目的的库,不依赖于React、视图、导航逻辑。 3. 在其他地方使用该库
因此,针对同一“项目”的Android、iOS和Web反应式应用程序将始终是三个不同的代码库,但它们可能具有许多共享的JavaScript代码,以重复使用库的形式存在。

你有没有看过 NativeScript? - dan-klasson
这是一个更多“哲学性”的陈述,而不是特定的工具。我们为不同平台开发了许多应用程序,虽然某些内部在各个平台上都很常见,但UI和导航模式却非常不同。它们足够不同,以至于制作单个项目来生成iOS和Android几乎没有意义。应用程序的主要部分 - 即用户看到的内容必须有所不同。因此,我非常坚信以库的形式重用代码是跨平台应用程序中最好的选择。我们以前在C中做过这样的事情,效果很好。 - Jarek Potiuk
4
同意Jarek所说的——跨多平台整个项目使用一个通用代码库似乎与React Native的初衷背道而驰。有很多框架让你只需编写一次代码就能在不同平台上运行,但这会导致用户体验非常糟糕。我曾安装过带有Android分享图标的iOS应用程序,以及具有iOS设计语言的Android应用程序,那真是太糟糕了。仅仅因为你可以做某事并不意味着你应该这样做。 - Richard Kho
我相信这也是Xamarin解决方案的工作方式:不同的UI但共同的逻辑。 - Colin Ramsay
1
如果React Native不能很好地支持跨平台,那么我为什么要首选它而不是像Java、Swift这样的本地开发呢? - Bagusflyer
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接