React Native 是否是一次倒行逆施?

2022-06-21 12:30:17 +08:00
 dcsuibian

我认为,Web 技术能实现出色的跨平台能力,本质上是因为浏览器提供了一个画板,而我们用 HTML 、CSS 、JS 在上面画出一个个像素,形成组件。也就是自绘

而 RN 则反过来,编译成原生组件,虽然性能提高了,但跨平台特性就又被削弱了,造成了不一致性。

这不由得让我想到了 Java 的 AWT 和 Swing ,前者就是因为要转成原生组件,所以只能使用系统组件的交集,而且不一致性严重,而后者则走了自绘的道路,性能略低,但不一致性增加。(不讨论 Java 的 GUI ,主要是看理念)

所以当我看到 RN 的做法,我一直觉得这是在开倒车。相反来说,我觉得 Flutter 的理念可能更正确点。

补充:

6535 次点击
所在节点    程序员
36 条回复
bkmi
2022-06-21 21:50:48 +08:00
@HiCode @secondwtq 实际上 Flutter 也是 2015 年出来的,只是那会叫 Sky ,也没什么热度 <amp-youtube data-videoid="PnIWl33YMwA" layout="responsive" width="480" height="270"></amp-youtube>
Danswerme
2022-06-21 21:57:51 +08:00
@Buges 请教一下,最后一句的“这些才是 react native 这样的库把 web port 回原生平台的价值所在”怎么理解,web port 是什么意思呢
pkupyx
2022-06-21 21:58:51 +08:00
不一致性恰恰是优点,安卓和 iOS 因为原生组件有区别,用户有些使用习惯就不一样,比如日期选择,强行显示一致反而降低产品体验。
Rocketer
2022-06-21 22:10:33 +08:00
说到底还是原生有没有必要的争论。

有个著名的故事是——扎克伯格以前也认为原生没必要,那会儿 Facebook 客户端都是 hybrid 的。但有一次他去非洲旅行,享受了一把那里的老旧手机和龟速网络,回来就把 Facebook 客户端改成原生了。

故事真假不重要,重要的在于理解 web 是奢饰品这件事。别让非洲兄弟们用“何不食肉糜”的眼神看你。
Buges
2022-06-21 22:13:29 +08:00
@Danswerme 抱歉,顺口了,就是迁移、移植的意思,把你的软件 port 到另一个语言 /框架 /操作系统,携号转网把你的 number port 到另一个运营商。这里就是说把前端用到的技术栈移植回原生开发的意思。
mxT52CRuqR6o5
2022-06-21 22:16:56 +08:00
如果要考虑 ios 平台的热更新的话,应该是只能使用类似 RN 的技术(这时应该不能用 hermes )或者 webview
mxT52CRuqR6o5
2022-06-21 22:19:26 +08:00
还有就是类似 RN 的技术和 webview app 的技术可以在电脑不安装 android/ios 开发环境的情况下配合模拟器 /真机开发 app (换句话说就是仅靠 node 环境就能开发 app ),这个其他方案都是做不到的
janus77
2022-06-21 22:55:09 +08:00
跨平台最初的定义是“一次编写,多处运行”。java 最开始就是以此为亮点。
要做到这点,现在主流的方法就是在各平台上塞一个自己的运行时。这点从 java 到 adobe 亦或是 js 都一样。
rn 并不是要做到最终效果能力一样,而是要首先满足“一次编写”,然后有空闲成本了才会去实现次要目标“逼近原生的渲染能力”。
Danswerme
2022-06-21 23:00:48 +08:00
@Buges 感谢解答
FreshOldMan
2022-06-21 23:12:32 +08:00
rn 最主要的就是 让会 react 的人也可以写 App ,让项目可维护的人变多,就是这么简单
darkengine
2022-06-21 23:36:15 +08:00
@bkmi 这个很有意思,初期还有 web 的影子在
realpg
2022-06-22 00:10:12 +08:00
java awt 和 swing 的并不恰当

在充分了解各自系统限制下,awt 提供了一种通用的原生界面的恰当界面

比如同样代码,在 windows 下很和谐的就像一个 windows 应用程序,在 mac 下很和谐的就像一个 mac 应用程序,“一致的批皮肤”

用 swing ,无论 win 还是 mac ,都有一种这 UI 好奇怪不伦不类的感觉
Alexrx
2022-06-22 04:34:50 +08:00
@daokedao 可能表述不是很准确。不是没出现 而是没有成熟稳定的项目出现
HiCode
2022-06-22 10:39:00 +08:00
@bkmi 那么是否有一种可能,即当时的手机硬件性能并不足以支撑 Sky ,所以没什么热度?
raykle
2022-06-22 10:46:38 +08:00
React: JSX -> dom
RN: JSX -> 原生组件(也是 dom )
有什么区别?
qW7bo2FbzbC0
2022-06-22 13:16:16 +08:00
”所以只能使用系统组件的交集,而且不一致性严重,而后者则走了自绘的道路,性能略低,但不一致性增加“

我没太理解什么意思,最后半句应该怎么断句

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/861083

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX