【译论】React Native 还流行吗?
我浏览了一些react native repos,发现很多repos已经好几年没动过了。它还流行吗?如果不流行,那现在流行的是什么?
我浏览了一些react native repos,发现很多repos已经好几年没动过了。它还流行吗?如果不流行,那现在流行的是什么?
本文由 TecHug 分享,英文原文及文中图片来自 Is React Native still popular?。
我浏览了一些react native repos,发现很多repos已经好几年没动过了。它还流行吗?如果不流行,那现在流行的是什么?
我浏览了一些react native repos,发现很多repos已经好几年没动过了。它还流行吗?如果不流行,那现在流行的是什么?
本文由 TecHug 分享,英文原文及文中图片来自 Is React Native still popular?。
我认为 React Native 非常适合开发可能需要相机、地图、浏览器和存储等功能的基本应用。但是,一旦你需要更复杂的功能,我认为最好用 Swift/(Kotlin/Java)编写模块,然后让 React Native UI 通过桥接与模块通信。
我认为 React Native 解决了组织带宽问题。在每个平台上构建真正的原生应用程序,无论在性能还是功能上,都会胜过 React Native 带来的任何效果。不过,如果你只有几个开发人员,我认为 React Native 是一个可行的折中方案。
像 Airbnb 这样的公司有足够的工程带宽来开发定制的特定平台应用程序,至于能做出哪些妥协,这取决于你和/或你所在的公司。
> 我认为 React Native 非常适合开发可能需要相机、地图、浏览器和存储等功能的基本应用程序。
但问题是,基于浏览器的 API 现在可以让你实现所有这些功能,而且访问方式通常要简单得多。在这种情况下,只需为 Android 构建一个渐进式 Web 应用程序(谷歌允许您直接将 PWA 放在 Play Store 中),然后为 iOS 包装一个薄薄的原生封装,通常会容易得多。
几年前,我在试用 Stripe 的 Identity 产品时遇到了一个重要的 “啊哈 “时刻。Stripe 仅凭浏览器 API 就能完成完整的图像分析(即拍摄身份证照片时的边缘检测),这真是令人惊叹。
除了游戏之外,如今真正需要原生功能的应用程序越来越少,因为你可以在浏览器中做很多事情。
在本机和浏览器中做什么并不重要。对许多人来说,应用程序就是互联网。这种观点非常以开发者为中心,但并没有考虑到现实世界。很多人更喜欢使用应用程序,尤其是中老年人群。至少我们的分析是这么说的。
> 对许多人来说,应用程序就是互联网。
双头垄断控制着现代社会最重要的功能之一,实在令人遗憾。控制、征税、阻止你与客户建立直接关系……
令人发指的反垄断
100%同意,这就是为什么我写道:”在这种情况下,只需为 Android 构建一个渐进式 Web 应用程序(谷歌允许您直接将 PWA 放在 Play Store 中),然后为 iOS 包装一个薄薄的原生封装,往往会容易得多。
换句话说,这些基于浏览器技术的应用会像其他应用一样出现在应用商店中。
这些应用程序的使用体验无法与 RN 或本地应用程序相提并论。人们可以分辨出它们的区别,除了后台办公类型的应用程序外,您都需要原生视图。
完全不同意。首先,有大量的原生应用程序本质上都是这些 “后台办公类型 “的样式。想想银行应用程序、大多数航空公司和酒店会员应用程序、房地产应用程序等等。使用网络技术让这些应用程序看起来很棒并不难(或者说我认为并不比原生应用程序难)。
如果您确实需要原生应用程序的 “流畅性”,我完全同意您使用原生应用程序,并使用原生框架来实现。
我不太喜欢 React Native 的原因是,它占据了一个 “奇怪的中间地带”–如果你需要原生应用的优势,那么使用原生应用通常会更简单、更省事(由于这个原因,一些大公司已经宣布放弃 React Native),但如果你想要跨平台,那么其他技术可能会更好。
听起来你有点同意,因为你同意我在后台提出的警告。当然,有百分之几甚至三分之一的应用程序可以这样做,但这远远不是大多数。
我可以举出很多 RN 应用程序,它们拥有令人难以置信的用户体验和出人意料的动画/交互性,而且我认为它们的代码库更易于使用。也许我有偏见,但 Uniswap 应用程序的各种原生视图做得非常好。他们在短短几个月内就推出了 Android 版本的应用程序,其中 95% 的代码与 iOS 共享。
也许这是世界上 iPhone 普及地区的一种文化现象?
在安卓领域,我经常看到网站催促用户使用应用程序,而用户却不使用应用程序,因为除了不停地向你发送不相关的通知外,它们的功能与网站完全一样。就像谷歌应用商店给人的感觉就像廉价商店一样,我想没有人会指望在里面找到什么正经东西。
通过观察当地(德国)的政治,我的观点是,企业主和政府部门的领导才是需要应用程序的人。他们似乎认为,要想成为时髦的、与时俱进的人,就必须有一个应用程序。(可能是因为这给了他们以后向人们发送垃圾通知的渠道,不过如果他们想得这么远,我会感到很惊讶)。
没错,但好的一点是,现在 PWA 可以进入应用商店,并且与应用程序无异。
“并用 iOS 的薄型原生封装器进行封装”,这是怎么做到的?我希望 iOS 浏览器和苹果应用商店能支持 PWA,但这不太可能。
你可以选择 Cordova 和 Capacitor。如果浏览器不能满足你的需求,你还可以使用本地应用程序接口。
应用商店中大量的应用程序都是这样开发的。
同意。如果你能在 SolidJS 等软件中不使用大量垃圾第三方库,仔细编写一些程序,我相信你也能获得 “原生感”。
我还要补充一点,我曾开发过大型 RN 应用程序,每月有数百万人使用。其性能非常糟糕。事实上,我认为不可能制作出像 Tradingview 这样的高级价格图表,它在手机上运行得非常好。
> 几年前,我在试用 Stripe 的身份验证产品时遇到了一个重要的 “啊哈 “时刻。Stripe 仅凭浏览器 API 就能完成完整的图像分析(即在您拍摄身份证照片时进行边缘检测),这真是令人惊叹。
你有 Stripe 应用程序的详细信息吗?我发现在移动设备上,如果要在相机上叠加 “将拍摄对象置于此处 “的矩形,或在旁边显示说明,或检测 QR 码以及其他对象,浏览器相机的处理能力就会有所欠缺。我希望这是一个过时的观点。我一直在考虑在下一个版本中使用 React Native,使用 https://github.com/mrousavy/react-native-vision-camera,因为它的功能似乎更加完善。
我还没有仔细研究过它是如何工作的,不过你可以在 https://identity.stripedemos.com/ 上试用一下。
我认为现在这种说法已经不那么正确了,因为像 Shopify 这样的公司已经投入了大量资金,开发了许多华而不实的库,例如 Reanimated,它可以制作非常定制的交互式动画。再加上像我这样的库,它使用优化编译器,在共享代码时让本地/网络上的速度更快,我认为你可以做出任何你想要的体验。卡塔林-米隆(Catalin Miron)等人在推特上成功复制了许多原生用户体验。
你仍然需要投入大量精力才能实现真正的完美体验,但即使是在 SwiftUI 中,你也必须这样做。在 SwiftUI 中存在许多性能隐患,而且必须编写 2-3 次应用程序意味着您的投入会大大减少。
> 我认为最好用 Swift/(Kotlin/Java)编写模块,然后让 React Native UI 通过桥接与模块通信。
用 Flutter 编写一切不是更简单吗?react+swift基础模块看起来就像是可维护性的噩梦,尤其是如果编写它的员工离开了公司,顾问们将永远不会碰它。
很难选择flutter ,因为谷歌已经没有任何商誉可言了。即使 flutter 很好(我也不认为它有多好),采用它也是一种巨大的赌博,而这是一个巨大的飞跃,很大一部分开发者都不会采用。谷歌在随机终止产品生命方面的声誉使 flutter 成为不可能的选择。
React Native 不就是一个通过将 React 代码转译到原生框架来使用原生框架生成图形用户界面的框架吗?
我明白重用前端专业知识来开发其他前端代码(如桌面和移动应用程序)的意义,但我很难理解 React Native 的卖点。如果我没记错的话,React Native 是作为一个个人项目开始的,这完全没问题,但我不明白,如果只需要使用原生框架,有谁会把自己的产品建立在错综复杂的异构 Jenga 技术堆栈上。
这不是转置,而是在桥上对话,在本地代码中使用工具。
根据我的经验,React Native 肯定 “失去了光彩”,这主要是因为它占据了无人问津的怪异中间地带:
1.如果你真的需要原生性能和集成的所有优势,那就使用原生吧。是的,你需要 “写两遍”,但你会发现,其实一开始就更容易雇到具有高生产力的一流 iOS 或 Android 开发人员(根据我的经验,他们往往是游击队员)。
2.我认为,自 React Native 首次出现以来,最大的变化是基于浏览器的跨平台工具包,如 Capacitor 框架(以及最初的渐进式 Web 应用程序),已经变得更好了,而且浏览器技术现在可以大量访问底层设备和传感器(加速计、摄像头、生物识别等)。我认为像 Capacitor 和他们的同类产品是解决这一问题的更好选择。
因此,在我看来,如果你真的需要原生框架,那就使用原生框架,但如果你的应用不需要原生框架,而且你可以进行跨平台开发,那就使用基于 Web 视图的跨平台框架。
如果您雇不起 “一流 “的 iOS 和 Android 开发人员怎么办?(或者任何额外的开发人员)
你不觉得有很多公司都是这样吗?
我曾制作过一款反应原生应用,首先针对的是网络。花了不到一年的时间。
花了 1 个月的时间让它运行起来,并部署到了两个应用商店,取代了我们的 iOS 和 Android 团队过去原生开发的应用。
现在,我只负责维护 Web、iOS 和 Android,使用一个代码库,95% 的代码共享。
以前,我们每个原生平台至少有两名开发人员。这样每年可以节省大约 60 万美元。
(基于浏览器的跨平台工具包就是个笑话,既不灵活,也很难扩展)。
>(基于浏览器的跨平台工具包是个笑话,它们不灵活,而且难以扩展)
如果是在 5 年或更早之前,我会同意你的观点,但现在我完全不同意。我当然不认为基于网页视图的框架比 React Native 有更多问题,相反,我看到 React Native 通常有更多问题。
我们必须达成共识。
对我们来说,基于网络视图的框架即使到今天也有太多限制。
React Native 能为我们提供类似原生的体验,而且没有任何问题。
Capacitor 框架有一个非常过时且无人维护的相机库(我曾担任过一段时间的维护者)。如果你想触发原生相机打开,然后获取图片,这没什么问题,但将相机嵌入到你的应用中就很麻烦了。
如果有人能为CapacitorJS开发价格合理的模块,那将会是一个很好的生态系统,但相反,我们却只能得到濒临灭绝的开源库,以及像Ionic这样价格昂贵的附加组件(4位数以上)。
我曾多次尝试 Ionic(7 年前和 1 年前),但每次都不尽如人意。我喜欢你现在可以做反应。但 Ionic 的文档过去和现在都很糟糕(很薄),论坛上充满了未回答的问题,或者是 Ionic 版本很老的答案。
如果你想用 Ionic 做一些真正的/生产级的东西,它很快就会让你失望。
它非常受欢迎,而且在过去几年里,随着 Meta 对它进行了更多的重新投资,我认为它正在重新崛起。
埃文-培根(Evan Bacon)在推特上对它做了一些介绍,但如果你筛选 App Store 几乎所有类别中排名前 100 的应用程序,它都是最受欢迎的库之一。
如果你想要一个活跃的社区和一个非常强大的 bootstrap repo,请查看 Tamagui(我的项目),它让构建通用的本地和 Web 应用程序变得轻而易举。
我也这么认为,不过在尝试过 Expo(大多数人都在用,FWIU)之后,我发现它的体验有时会很……艰难。我遇到过很多依赖性错误和奇怪的错误,这些错误需要通过挖掘问题才能找到(我相信 Expo 默认不支持 .tsx… 什么?)
这并不是来自通常的 “JavaScript 是坏的 “那群人,而是来自一个通常对 JavaScript 相当赞成(同时也认识到其缺点)的人。总的来说,它的体验远非完美,但我想,只要你能让堆栈正常工作,你就能做出很棒的应用程序。
(总的来说,我最受不了的就是调试工具链和构建系统。极其枯燥、令人沮丧且乏味)。
虽然已经有一段时间了,但这是我的经验之谈。与 expo 斗争耗费了大量开发时间。
我也有过 100% 的经历。Expo 依赖性和构建问题似乎永远不会结束。
是的,它仍然很受欢迎。看看谁在使用它–亚马逊刚刚添加了它
对于 React Native 来说,库一直是一个独特的问题。很多时候都得不到维护,而且质量也可能很低–就像对现有原生组件的半成品重新实现,跳过了整个 “原生 “部分。
目前还没有其他跨平台移动框架能与之媲美。Flutter 是存在的,也有它的优点,但在 iOS 上永远不会有令人惊叹的体验。它们不使用原生组件,而且原生组件可以访问除苹果公司外其他公司无法访问的操作系统内容。
– 更新 iOS、Android、React 中的代码
– 大部分工作只是保持平台之间的保真度
– 永远
– 可能没有报酬
– 你工作的主要受益者是世界上最大的两家公司
– 无论如何都不会得到赏识
需要非常特殊的人才能做到。
每个技术都有被遗弃的 repos,尤其是流行的技术。
随着 React Native 在过去几年中日趋成熟,社区针对常见问题开发出了更完善的解决方案,许多旧版本的缺陷也随之被淘汰。也许这就是你看到的情况。
据我所知,React Native 的唯一主要竞争对手是 Flutter,但它有几个缺点,让我不太愿意推荐它。
你认为 Flutter 有哪些缺点?
在 Impeller 的帮助下,Jank 问题已经得到了相当程度的缓解,因此在性能方面,它与 RN 相当。我觉得唯一的两个问题是 Flutter 核心团队离开了谷歌,以及 Flutter 网络版不稳定(老实说,我只是希望他们不要再开发网络版,而是专注于移动版)。另一个问题是学习一门新语言,但 Dart 是强类型语言,比 Javascript 更容易上手。
无论如何,RN 和 Flutter 只应在 MVP 阶段使用,一旦可以使用,就必须在适当的时候立即转为在原生平台上构建。
你说的都对–垃圾、新语言,最关键的是谷歌的长期支持,在这方面谷歌太不值得信任了,以至于变成了一个流行语。
Flutter 仍然是开源的,其社区比任何竞争对手都要强大。我认为它还会存在很长一段时间。出于某种原因,它在亚洲特别受欢迎,尤其是印度和中国。在中国,已经有专门为 Flutter 开发的模块了,所以我不会过早地将其列入 killedbygoogle 的名单。
iOS 的问题是新的 Impeller API(不知道你是否已经更新)的最小问题。虽然还存在一些问题,但在推出 MVP 与再花一个月时间开发原生应用之间,我觉得还是先用 Flutter 做 MVP。如果您的应用起飞了,再改用原生应用。
人才库是不存在的。在堆栈中使用找不到人的技术是疯了。
至少在 RN 中,有成千上万的 React 开发人员。
不过,你招聘的不是技术栈。Flutter 的学习曲线比 RN 快得多,它在初学者中越来越受欢迎就是明证。根据我的经验,React 开发人员学习 Dart 或 Flutter 不会比反过来难–事实上,在 eBay 和宝马的博客文章中,他们的技术团队很容易就学会了 Flutter,并在一周内部署了生产应用。
当然,大多数招聘移动开发人员的公司都做错了。Flutter 还没有像 React 那样存在足够长的时间,因此多年的经验在这里是一个毫无意义的指标。
我不同意。是的,每一位经验丰富的开发人员都可以在 6 个月内学会任何其他语言/框架,并能使用它,事情并没有本质上的区别。
但这些人很容易跳槽,而且大多数人都不太愿意把自己的马车搭在 Flutter 上–这是一个新生的框架,基本上与 Web 开发没有任何交叉,而且背后还有一家大公司,以随心所欲地扼杀自己的玩具而闻名。
去其他地方做 RN 要容易得多。
但学习曲线很低,尤其是对于 JS/React 开发人员来说。
Flutter 并不是凭空出现的,Dart 在很大程度上受到了 Javascript 的启发,其渲染模型与 React 非常接近。
与其说问题在于纯粹的技术能力,不如说问题在于他们出于职业考虑而不愿从事相关工作。
在过去两年里,我一直在使用三个 flutter 应用程序(安卓和 ios),平台性能的改善一直呈上升趋势。我们的一个应用程序同时运行 6 个视频播放器,但这似乎不会影响性能,而且还集成了 Unity 游戏和其他一些 “重型 “功能。对于在屏幕上显示内容的基本任务来说,它的响应速度和性能都不错。然后,为实现某些功能(视频等)而降级到单独的操作系统就轻而易举了。我唯一的不满是,它作为框架不够有主见,试图对所有开发人员面面俱到,这使得架构上的改动在面对不同意见时充满争议。(比如从头开始实现最新的路由器)。作为一个工程团队,每个人都可以是 Flutter 开发人员,但只有少数人必须是 Kotlin/Swift 开发人员才能实现功能。
nb:不过,RN 或 Flutter 还是比 Maui 更有竞争力。
Flutter 技术负责人刚刚离开谷歌(Hixie),这让我对 Flutter 本身产生了一些怀疑。
以下是该人士就此发表的文章:https://ln.hixie.ch/?start=1700627532&count=1
Hixie 仍在开发 Flutter,他在帖子中提到了这一点(请查看 Flutter Discord)
Discord 的 iOS 和 Android 应用程序采用 React Native [1]。这使得业务逻辑可以与桌面和网络客户端共享,两个移动应用程序之间也可以共享用户界面组件。
您之所以会看到被遗弃的 repos,部分原因是社区采用了 Reanimated、React Native 手势处理程序和 React Navigation 等库,这些库为在 JS/TS 中实现宏大的动画和原生体验提供了大量优势。
React Native 已经足够成熟,可以构建大型应用程序,而且社区非常活跃。虽然仍需要使用 Swift/Kotlin 来实现某些功能,但对于大型应用程序来说,这并不是意料之外的提升。对于跨平台的 JS/TS 应用程序来说,RN 的代码共享和交付灵活性优势无可替代。我认为,由于 RN 的独特优势,它仍将具有相关性,社区库栈也将不断成熟。
[1] https://discord.com/blog/android-react-native-framework-upda…
Discord 应用程序有点笨拙,还不算太差,但 iOS 上的文本输入方式很奇怪,我不太记得了,但肯定是非标准的。不过我曾在 RN 工作过几年,我仍然认为它是个不错的选择。
当 Discord 的 Android 版本过渡到 React Native 版本时,我卸载了它。性能和稳定性的下降让我难以忍受。至少我手机上的干扰少了!
免责声明:我写了一本关于端到端创建应用程序的书,我使用 Flutter https://news.ycombinator.com/item?id=38433668
Flutter 生态系统也是如此。我在现有项目中使用的库有一半已经一年没有更新了(我选中它们时它们还很活跃)。虽然它们仍在工作,但考虑到 Flutter(和 Dart)的发展速度如此之快,这让我很不舒服。
如果你喜欢使用 JS,那就选择它(React Native)。但在投入之前,请提前考虑您的应用程序必须具备的 UIUX 功能,并构建一个 PoC。如果你能在不到一个小时的时间内使用内置/库存相机访问,但却需要数百个小时来制作自定义相机屏幕,请不要感到惊讶。
我在网上找安卓程序员的工作,当有人要找安卓或移动程序员时,我经常看到 React Native。
人们需要的是大量技能–你需要懂 Javascript,然后可能懂一些 HTML 和 CSS,然后是 React 框架。这足以让你找到一份 React JS 程序员的工作,但你也应该了解 React Native。另外,RN 并不涵盖所有情况,所以要了解 Android 生态系统(Kotlin 和 Android SDK,也许再加上一些 Java)和 iOS 生态系统(Swift 和 iOS SDK,也许再加上一些 Objective C)。大多数大公司倾向于拥有独立的 Android 和 iOS 应用程序,但并非所有公司都是如此(Discord 是 React Native IIRC)。
对于初创公司来说,这可能有些意义–拥有几个 RN 程序员,然后让一两个人深入研究 RN,为你的产品制作 Android 和 iOS 应用程序,其中一些使用你现有的代码库。据我所知,这种方法并不能扩大规模,尽管像 Discord 这样的公司可能会在他们的使用案例中采用这种方法。一旦 A 轮或 B 轮融资到位,工程设计人员就必须停下来,看看他们是想继续在这个摇摇欲坠的未来基础上继续前进,还是组建一个小型的 Android 和 iOS 团队,开发原生应用程序。
过去几年中,我用 React Native 构建了几个应用程序。
我之所以想使用 React Native,主要是因为我认为 iOS 生态系统现在真是一团糟。SwiftUI 并不成熟,而 UIKit 与当今的需求相比已经过时。如果你刚刚起步,RN 所带来的倍增效应几乎难以忽视。
1) 即使是在过去几年里,React Native 也变得更好了。性能差距已经不明显了。事实上,在某些情况下,我认为使用 RN 比使用原生更容易获得更好的性能。
2) 确实有一种浪潮的感觉,大量的库被创建,然后又被抛弃。但总的来说,有很多库都很不错,维护得也很好。
3) 如果您需要非常紧凑的体验,原生库仍然更好,但这种差距也在缩小。由于您可以轻松降级到原生,这个问题应该不是什么大问题。
是的。看看 Expo。React Native 文档推荐使用它,而且它的维护和发展非常积极。不过也有一些大公司正在转向。AirBnb 有几篇关于转向真正原生的博文。
在 Stream,我们以前很容易就能招聘到反应式本地语言人才。如今,想找到愿意使用 RN 的有经验的人已经不可能了。在 Go 或我们的其他 SDK 上却没有这个问题。如果有人想在欧盟或阿姆斯特丹远程寻找 RN 领导职位,请访问:https://getstream.io/careers/job/5714344003/。
找不到?你们的招聘信息中没有薪水信息,谷歌搜索一下就会发现,你们的薪水只有我作为远程 RN 工程师薪水的一半左右。这不太可能是因为 RN。
可能就是这个问题,不过我们的工资涨了,而不是降了。我想基本工资是 12 万左右,权益工资是 12 万左右。
我在谷歌上搜索你们公司时,只列出了软件工程师的总薪酬低于 10 万美元。12 万美元比这稍好一些。在私营公司,股权的价值为零,除非有一套可以出售股权的系统,所以不要试图声称股权对大多数人来说有任何价值。
我是一名员工工程师,完全远程管理,收入约为 20 万美元+股权,但由于我的公司也是私营企业,股权 === 0。我想说的是,在目前的市场环境下,我的薪酬适度偏低,但我很满意这样的权衡,因为我的公司完全远程管理,工作生活平衡得很好,而且我与很棒的人一起工作。
这是美国的工资,对吗?所以你会觉得会更高。当然,有些公司可能不分国家支付同样的薪水,但根据我的经验,通常会有所调整。
我的公司在全球运营,但总部设在美国。我们不会根据地点调整工资。
真不错!
我认为这绝对有其优点。如果你有一个为桌面浏览器构建的 React Web 应用程序,并且你已经将代码干净利落地分离开来,以便将 API 调用、类型、实用程序等数据层与桌面用户体验层分开,那么你就突然拥有了一种节省时间和金钱的绝佳方法。您只需编写数据层,然后您的桌面应用程序和移动应用程序就可以节省大量的重复工作和维护工作,并保持彼此同步。
我听到的关于 React Native 的讨论大多认为,它的基本功能没问题,但很快就需要专门的代码来处理所有平台的各种怪癖。此外,与原生应用相比,React Native 还会出现类似网页的延迟。
我最近听到有人推荐 Flutter,但我对它的了解甚至还不如我对 React Native 的了解。
如果你使用的是 Tamagui,那就不对了,它有一个非常智能的优化编译器,能利用所有平台特性生成接近最优的网页代码。
Flutter 已经奄奄一息,它适用于游戏或仅适用于安卓的应用程序,但任何网页或 iOS 应用程序都会让人感觉非常奇怪、缓慢且非原生。
您最近试过 Flutter 吗?一般来说,它为什么会死亡?
我们在安卓和 iOS 上部署了一个 Flutter 应用程序,其中包含大量原生组件,它在这两个平台上都能完美、快速地运行,并且具有原生感的用户界面。即使移植到 Windows 和 Mac OS 也相对容易,而且能提供非常流畅的移动应用程序。
在 iOS 上,Flutter 给我的感觉总是怪异谷(uncanny valley),因为它是原生控件的再创造,而不是真正的控件。根据你的应用设计,这并不总是什么大问题,但如果你想要一个看起来像苹果公司会做的应用,那就会感觉不对了。
> Flutter 正在消亡
您有引文或数据来证明这一点吗?我们最近用 Flutter 重写了几个跨平台应用程序,从我们的角度来看,Flutter 似乎正在大踏步前进。
也许是这个:
– https://news.ycombinator.com/item?id=38401242
– https://ln.hixie.ch/?start=1700627532&count=1 (这是已经离开谷歌的 Flutter 主要贡献者之一,这可能表明该项目可能会失去资金支持)
这里也有同样的问题,我将使用 RN
我最近用它构建了几个应用程序,我发现它非常棒,如果您的应用程序具有与网络应用程序类似的功能–文本、图片、数据字段、相当标准的导航(一些更复杂的基于交互式/画布的应用程序看起来有点棘手),我会推荐您使用它。我遇到的唯一问题是,React Native 最近添加了一个新的渲染引擎,一些动画库需要更新才能与之配合使用(不过,这项工作似乎正在进行中)。总的来说,使用 React Native 非常简单,我找到了几乎所有我想要的库,而且我在一周内就开发出了一个漂亮的 iOS 小应用程序,它具有轻扫、无限滚动、懒加载、拉动刷新、流音频、本地图标、弹出表单和 supabase 集成等功能。
Github 上的开源项目并不代表 “受欢迎程度”。应用商店上有大量的 RN 应用,而且都是闭源的。
作为一个尝试过大多数流媒体实时移动应用程序的人,我选择 RN/EXPO 的唯一原因是其社区规模和易用性。基本上,一切皆有可能!
通常的建议是先用 RN 构建 MVP,然后在筹集资金后再转用本地程序,但我强烈建议不要这样做,除非您的应用程序的性质要求使用本地程序。您可以一直使用 RN,直到达到 FB/Instagram 的规模!
这里有一则轶事:
最近,我开始做一个移动应用程序的个人项目。该项目涉及扫描网页并从中生成电子书,同时内置一个带有可视化控件的阅读器。
我以前从未使用过 Swift 或 UIKit,而我专业使用 React 已经有几年时间,因此我考虑使用 React Native。
100多个被遗弃的 repos、蹩脚的构建工具、与一个叫 expo 的东西之间奇怪的分裂让我完全回避了 React Native,而我一直在快乐地学习 SwiftUI 和 UIKit。
我们遇到了一些完全阻塞的 bug,无法解决。另外,使用观察对象管理数据也很难。
这里所有憎恨反应的人都是害怕丢掉工作。我喜欢它,我可以用 RN 轻松创建我想要的东西。我知道我听起来很蠢,但这就是现实。
据我在企业界所见,这是压倒性的默认情况。企业根本不会为独立的本地 iOS 和 Android 应用程序买单,即使你提出了令人信服的证据,证明它更好、更快、更便宜。
这并不是世界上最糟糕的事情,但 React Native 会让你的整个应用感觉很笨重。推送过渡这么简单的事情,用 SwiftUI 的几行代码就能完成,而且效果比它好 1000 倍,这实在令人沮丧。
> 更好、更快、更便宜
更好是主观的,更快–在我看来–已经不再是廉价现代手机的重要因素,除非你要做类似 AR 的事情。但我不知道如何用更便宜的价格开发两个本地应用程序。
吝啬鬼…我有点同意。不过我想说的是,如果你的开发人员有原生开发经验,并且知道自己在做什么,那么大部分问题都可以轻松避免。
为什么不用 Flutter 或其他跨平台框架?
根据我的经验,用 Flutter 重写的应用程序都很笨拙,我一眼就能看出来–尤其是在动画/过渡和伪造原生小部件方面(基于最近用 Flutter 重写的我经常使用的两个应用程序的样本):飞利浦 Hue 和 EE 移动网络)。
当然,RN(或原生!)也会出现同样的问题,我相信经过足够的努力,这些应用程序可以变得更加流畅,但这可能并不是当务之急;但这两个应用程序都是由大公司开发的,对我这个 iOS 用户来说,与它们之前的原生实现相比,感觉非常糟糕,所以 Flutter 绝对不是灵丹妙药。
Flutter 是 React Native 的二倍,因为它试图自己渲染整个用户界面。
MAUI 刚刚经历了从 Xamarin 迁移过来的艰难过程,还有待进一步成熟,开发者们感觉自己被微软忽视了。
Cordova 就是手机上的 Electron,只要做一个 PWA 就可以了。
Kotlin 多平台很好,但 Compose 多平台只支持 iOS 的 Alpha。
Flutter 在 iOS 中使用的新渲染引擎 Impeller(Android 预览版)几乎不存在 Flutter jank。
Compose 多平台使用 Skia,因此在 iOS 中也存在 Flutter 多年来一直存在的着色器编译问题。
我一直听说 Flutter 不好,因为它 “试图自己渲染整个用户界面”。这种说法听起来不错–至少在纸面上是这样–因为之前所有的尝试都惨遭失败。
但是,令我难以置信的是,我必须承认,Flutter 不只是尝试了,它还真的做到了。就外观和感觉而言,我无法区分 Flutter 应用程序和本地应用程序。
你可能会对 Jebtrains 的 Kotlin Compose Multiplatform 感兴趣,它能让你在 iOS、android 和其他系统中交叉编译到原生 UI,并能与 iOS 原生代码(尤其是 UI 代码)顺利互操作。
https://www.jetbrains.com/lp/compose-multiplatform/
我想这是个新东西,我自己还没试过。
我认为是的,最近我看到一些大型消费类公司从原生语言转向了这种语言。
如果你刚刚入门,我强烈推荐你使用 expo。不久前,我写了一篇文章,介绍如何使用它来制作一款游戏,而不是使用 unity,https://parrisneeds.coffee/posts/making-a-game-in-react-nati…
我最近非常喜欢使用 Hyperview (https://hyperview.org/),它使用 React Native 作为基础。我曾经认为 PWA/Ionic/Capacitor 应用程序更好,但现在我真的爱上了 Hyperview 的简洁性和 HTMX 等工具。
我昨天才知道 Hyperview,正在学习它,我觉得它很有趣。
如果你已经有了一个在移动端也能正常运行的 Web 应用程序,我不认为还有什么比 PWA 更简单的了。您可以在一天内完成,而且只需要每一两年更新一次。我之所以知道,是因为上周六我不得不填写几份问卷,以便升级到支持 Android 14,但也仅此而已。(这些问题适用于 Play 商店中的所有移动应用程序)
PWA 的问题出在 iOS 和 MacOS 上吗?据我所知,苹果并不支持 PWA。
pwabuilder.com 提供了实验性支持,但苹果公司仍然没有真正支持它,而且你仍然需要一台 MacBook 才能发布,这太荒谬了。
React Native 一直很棒。但直到最近,更新旧版本的 React Native 才真正成为一项挑战。不过,所有的复杂性都来自原生层。
很多 SaaS 提供商都提供随时可用的 React Native 组件,即使是新创公司也不例外。生态系统感觉很强大,而且比编写两个独立的应用程序更经济。
去年,我为一个中等规模的业余爱好项目购买了 React Native 和 Expo,发现它比我三年前开发 Flutter 应用程序时的体验更好。我一直听说 React Native 的依赖关系一团糟,但我并没有这样的经历。一切都很稳定,Expo 的文档也相当不错。
我的想法是尽可能避免使用 React Native。
如果你想要一个主要面向信息的软件,而不需要大量的操作/交互,那么就选择基于 Webview 的解决方案(Capacitor + react)。
如果你想要高性能的操作/交互式软件,那就使用原生软件。
从目前的情况看,微软最新的 Office 就是在它的基础上开发的。
https://devblogs.microsoft.com/react-native/2023-09-08-rneu-…
Expo 已经接管了反应原生场景–看看他们使用的库,你会发现他们相当活跃。Expo生成原生项目的方法比 OOB react-native 方法要好,后者会让升级变得非常乏味。
React Native 并不是开发应用程序的更好方法。它和开发原生应用程序一样复杂,而且正如你提到的,这些库还不够好/维护得不够好。
我试过 RN 和 Flutter,我更喜欢 Flutter。
非常喜欢。但我认为很多软件包已经被Expo放弃了。
看看 Expo,它可能是最活跃的 React Native 项目了。
我想说是的,虽然现在有些是通过 Expo 实现的
Flutter怎么样?
很好,这说明它慢慢变得稳定了!