我们有一个使用reactjs开发的小部件的稳定版本。我们想开发相同的移动版本。使用react native进行开发并在2个应用程序之间共享代码是否更好?或者我们本地开发小部件更好。
请记住,我们确实拥有(反应和Android开发)方面的专业知识,但我们不想投入太多时间再次开发整个应用程序。
如果我们选择react-native,是否有任何工具/资源可以更快地完成这项工作?
在线提供的资源:
http://jkaufman.io/react-web-native-codesharing/
https://arielelkin.github.io/articles/why-im-not-a-react-native-developer.html
干杯!!!
答案 0 :(得分:11)
Instagram, Tesla, AirBnB, Discord, Bloomberg都有使用React Native编写的生产应用程序。在您看来,我会让您自己决定是否已准备就绪。
虽然React Native可以让您在iOS和Android之间重用代码(我们目前正在为客户端构建应用程序 - 从外部库中获取 - 在iOS和Android之间重用超过99%的代码),但它并不是为了共享代码而设计的使用React webapps。
Facebook的React Native理念,而非一次编写,随处运行,相当学习一次,随处写。
您绝对可以使用您的设计和架构,但您需要重写大部分代码。但是,它可能比开发两个独立的Java和Obj-C / Swift应用程序更有效。
更新:2018年,Airbnb决定在其制作应用中落实React Native。他们写了一篇关于他们的经历和推理的富有洞察力的文章。对于任何考虑使用React Native的人来说都非常重要。 https://medium.com/airbnb-engineering/react-native-at-airbnb-f95aa460be1c
答案 1 :(得分:6)
你可以查看ReactXP(https://microsoft.github.io/reactxp/),它使用reactjs并做出本机反应来构建跨平台应用程序。
答案 2 :(得分:3)
您不能只将整个代码用于react-native应用程序。首先,您必须遵循react-native架构,然后使用react-native组件开发UI。
您肯定必须为移动应用程序和网络应用程序分别编写组件。但是您始终可以重用业务逻辑API通讯层。
创建可重用组件并将其共享到Shared文件夹中,然后在任何地方重用Mobile / Web。
将反应转换为本机平台是一个简单的过程。逐步过程如何在React Native中重用代码,在图像中以React Native Web视图作为介绍的新娘react-hooks
分步指南如何操作 React vs React Native的可重用性和我们在React和React的本机代码之间可以实现的可重用性百分比将在下一部分中说明
React和React Native之间的共享代码:
分别用于移动和网络的专用代码(特定代码)
设置共享项目
确保您位于项目的根文件夹
$ mkdir -p packages/components/src packages/mobile packages/web
使用“ {packages / mobile”中的react-native-cli
创建React Native项目
在create-react-app
内使用packages/web
创建React应用
在根目录中创建package.json
以启用纱线工作区
创建共享文件夹
现在创建一个公共或共享文件夹,其中将存在React和React Native的通用代码。
$ mkdir -p packages/common
在公用文件夹中创建package.json
文件
命名包并添加主文件(条目文件)
配置React Web应用程序
在您的react-app-rewire-yarn-workspaces
的开发依赖项中添加react-app-rewired
和web/package.json
将脚本从react-scripts更改为react-app-rewired
"start": "react-app-rewired start"
"build": "react-app-rewired build"
"test": "react-app-rewired test --env=jsdom"
"eject": "react-app-rewired eject"
Add config-overrides.js inside web
配置React Native Mobile应用
在mono repo上配置react-native有点棘手。在使工作区在React Native应用程序中工作之前,我们需要了解两件事。
符号链接
符号链接是包含对另一个文件或软件包的引用的任何文件的术语。为了实现符号链接,我们将使用wml。
最后
创建可重用组件并在Shared文件夹中共享,然后在任何地方重用Mobile / Web。
从Web(响应)迁移到移动(React Native)或从Mobile(React Native)迁移到Web(React)
取决于以下关键点
在这里,我尝试提供一个简单的解释,说明如何使用react-native
在React和react-native-web
之间共享代码。未来几天,我还将在此处添加convert react native app to web
的详细过程指南(逐步指南)。
从React迁移到React Native
结论-根据我的理解并基于上述几点,我可以说您可以将20%至50%的React JS代码重用于React Native平台
从头开始开发
结论-根据我的理解并根据上述几点,我可以说您可以将50-70%的React JS代码重用于React Native平台
答案 3 :(得分:2)
它可以在移动应用和网络应用之间共享。您肯定必须再次为移动应用编写组件。但是你总是可以重用业务逻辑。
如果您在Web应用程序中使用了React,那么工作就会变得更加容易。 React native的主要危害之一是状态管理。现在复杂性取决于您的应用程序。通常建议将Redux与React Native一起使用。
真正的问题是你可以分享多少代码。希望这有帮助。
答案 4 :(得分:1)
现在有一个名为react-native-web的工具,可让您在网络和移动设备之间共享代码。
了解详情:https://www.smashingmagazine.com/2016/08/a-glimpse-into-the-future-with-react-native-for-web/
答案 5 :(得分:1)
我并没有在这个问题上过多夸张,而是在https://dev.to/kylessg/a-sensible-approach-to-cross-platform-development-with-react-and-react-native-57pk上写了一篇相当深入的指南。
不过,总而言之,您可以在React和React Native之间获得大量的代码共享,但不要过度共享您的共享内容。这样做可能会使您的代码难以维护,从而导致您试图过度简化移动设备和网络之间的有效区别。
对于我自己,这是遵循以下原则的:
共享:
特定于网络/移动设备:
答案 6 :(得分:0)
您当然可以分享存储和网络层,而不是网络和移动设备反应代码库 虽然实际上您只能共享存储层的一部分,但是在移动应用和Web应用的情况下,您可能希望以不同方式获取数据。
答案 7 :(得分:0)
解决Web,iOS,Android和Windows上的代码共享的两个流行选项是
下面是https://microsoft.github.io/reactxp/docs/faq.html的精彩摘录,着重说明了差异。
ReactXP与React Native for Web有何不同?
React Native for Web是一个由Twitter的工程师开发的开源库。在React Native for Web可用之前,我们开始实施ReactXP。
这两项工作的目标相似,但是方法不同。 ReactXP是位于React Native和React之上的一层,而Web的React Native是React Native的并行实现—是iOS和Android的React Native的同级产品。
ReactXP通常只公开所有平台上可用的道具,样式属性和API。如果您编写ReactXP的抽象,您将很有信心它将以相同的方式在所有受支持的平台上运行。使用适用于Web / iOS / Android的React Native可以实现相同的目的,但是您需要更加小心使用的组件,道具和API。
答案 8 :(得分:0)
直到今天,这种哲学仍然保持不变,即到处学习一次。正如在其他帖子中非常正确地指出的那样,react和react-native都是基于JavaScript的,通过一种架构设计方法,您可以共享您的业务逻辑。
另一方面,由于硬件的特性,为Web(主要在台式机/笔记本电脑浏览器上)和移动(本机)上使用不同的表示层是完全正常的。
该问题要求提供一种可以加快开发过程的工具。为此,可以将这个名为react-spa-jwt-authentication-boilerplate(*)的github存储库用作示例。通过保持准确的名称,它通过一个名为common-logic
的文件夹在Web版本和本机版本之间共享“业务逻辑” *.js
个文件的副本。另一方面,导航和表示层不同。它实现了一个示例身份验证过程,该过程本身也可以用作新项目的基准。
(*)Disclimer:我是仓库的实现者。我们确实需要实施回购协议,以减少移动和Web应用程序之间的开发时间。
答案 9 :(得分:0)
是的,我们可以重复使用代码。而且效果很好。 这是一个示例应用程序存储库 https://github.com/spoman007/reactXstarter