V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gongquanlin
V2EX  ›  移动开发

2022 年了, React Native 和 Flutter、uni-app 怎么选?

  •  
  •   gongquanlin · 150 天前 · 5552 次点击
    这是一个创建于 150 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近想学一门移动端跨端技术,作为自己技术栈的一个补充,看 v2 上支持 rn 和 flutter 的各一半,但是回答都是 20 年或之前的居多,反对 flutter 的主要原因,主要是 flutter 技术没有这么成熟云云

    现在 2022 年了,flutter 也出了 2 了,因此想看一下广大 v 友对这两门框架的意见?

    介绍下个人情况:在公司主要是写 vue 和 java ,在外写 php+go ,所以也不排斥学新语言(dart)。

    看写法上 flutter 和 RN 都很像,业务上之前请教前端大哥,app 都是 uniapp 一把梭哈,虽然 uniapp 可以,而且看 csdn 的客户端好像也是 uniapp 的?但是还是想搞一把 rn 或者 flutter

    倾向于 rn ,因为会 css ,觉着用 react 写样式也比较快; flutter 主要是嵌套地狱太劝退了,看样式上和 css 好像没有太大区别;

    所以不知道各位 v 友有啥建议没

    37 条回复    2022-02-26 16:20:21 +08:00
    geekrainy
        1
    geekrainy  
       150 天前 via iPhone   ❤️ 14
    首先排除 uni
    rophie123
        2
    rophie123  
       150 天前
    会 vue 反正我选 uni ,如果为了学习的话可以学学其他的
    7gugu
        3
    7gugu  
       150 天前 via iPhone
    uniapp
    cnbattle
        4
    cnbattle  
       150 天前 via Android
    如果你的移动端想包含 h5,各小程序平台,业务不涉及什么底层,信息流为主,选 uniapp 出活快,

    如果玩底层,得玩原生,看个人学习目的和需求,我为了出活 h5 ,小程序,app 都搞,常规业务需求,用 uniapp ,因为之前会 vue ,直接上手,成本极低……楼主参考下,溜了,各位大佬勿喷🙈
    TinyKube
        5
    TinyKube  
       150 天前 via iPhone
    2 年前 flutter 成熟度确实不如 RN ,现在 RN 生态半死不活,我会选 Flutter
    Chism
        6
    Chism  
       150 天前
    uniapp 其实就是 webview 包皮,性能上不及 rn 和 flutter ,好处是,它不仅可以编译成 iOS 和安卓,还能直接做成各个平台的小程序以及快应用
    但是 bug 多也是很多开发者诟病的
    如果是面向国内,uniapp 应该问题不大,毕竟大量小公司都在用,1 个程序员同吃所有端,甚至后台(unicloud),美其名曰新全栈
    meteor957
        7
    meteor957  
       150 天前
    前几年肯定推荐 rn ,现在很难说。
    chotow
        8
    chotow  
       150 天前 via iPhone
    用 Flutter 写的百度贴吧 iOS 版跟💩 一样,此外没见过其他写得好的 Flutter 应用,所以非客户端开发的我盲推 RN 。
    IGJacklove
        9
    IGJacklove  
       150 天前 via iPhone
    个人看好 flutter ,未来前景会更好。
    Chad0000
        10
    Chad0000  
       150 天前   ❤️ 4
    我就知道没人推 Xamarin ,我在用它。[狗头]
    rabbbit
        11
    rabbbit  
       150 天前
    学习的话 uni 就算了, 正规点的厂子基本上没有用这玩意的.
    Rrrrrr
        12
    Rrrrrr  
       150 天前 via iPhone
    Flutter
    Building
        13
    Building  
       150 天前 via iPhone   ❤️ 2
    单纯学习的话不建议学习这种框架中的任何一种,浪费时间,随便学 Android 或者 iOS 都行,其实大体思路都是一样的,这种框架仅仅适合快速搭建简单的数据展示类应用,稍微复杂一点的应用,原生流畅你可能都保持不好,更别说用这种框架了,做出来的东西根本不能用,再加上没有认真了解过底层运行机制,遇到问题瞬间就搁浅了。
    XCFOX
        14
    XCFOX  
       149 天前
    个人推荐 Flutter

    目前而言 RN 的生态比 Flutter 其实略逊一筹,阿里云腾讯云的很多服务会提供 Flutter 、iOS 、Android 的 SDK 但没有 RN 的 SDK 。Flutter 的开发的移动端应用目前能直接跑在 Web 端上。
    Flutter 坑很多,听说 RN 坑更多。
    《哔哩哔哩漫画》所有页面都是用 Flutter 开发的,流畅度非常不错。
    另外是个人觉得 React 的函数式数据更新思路很奇怪,后来的 vue3 、solidjs 、Flutter 的 GetX 都没有采用 React 的函数式 + Hook 的思路,代码写起来顺畅多了。
    LiuJiang
        15
    LiuJiang  
       149 天前
    @XCFOX "另外是个人觉得 React 的函数式数据更新思路很奇怪,后来的 vue3 、solidjs 、Flutter 的 GetX 都没有采用 React 的函数式 + Hook 的思路,代码写起来顺畅多了。",React 本身强调的是函数式编程理念,如果把编程思想转换下,或许就不会奇怪了,反而会深度认同
    makelove
        16
    makelove  
       149 天前
    @LiuJiang react 怎么就强调函数式了,那 solid 和 react api 很类似是不是也算函数式
    WenhaoWu
        17
    WenhaoWu  
       149 天前 via iPhone
    全职写 flutter 两年了,不后悔
    wingkwanli888
        18
    wingkwanli888  
       149 天前
    flutter 吧, react native 現在的生態不行了
    hxse
        19
    hxse  
       149 天前   ❤️ 2
    同样很难接受 flutter 官方那种冗长难明的写法, 尝试找了一个下社区方案, 看看有没有什么简洁优雅的写法, 还是有的

    函数式组件的写法:
    https://pub.dev/packages/functional_widget
    hooks 的写法:
    https://pub.dev/packages/flutter_hooks
    状态管理库:
    https://pub.dev/packages/hooks_riverpod
    灵感来自 Tailwindcss 和 SwiftUI 的 i 框架:
    https://pub.dev/packages/velocity_x
    简化嵌套的语法:
    https://pub.dev/packages/nested
    Shook
        20
    Shook  
       149 天前
    公司业务原因,flutter 和 uniapp 都有写,我个人觉得都值得学习。
    如果实在只能学一样,我推荐 flutter ,因为它类型完备、调试方便。
    Bijiabo
        21
    Bijiabo  
       149 天前
    首先排除 uni 和 Flutter ,然后...似乎没得选了
    Yother
        22
    Yother  
       149 天前 via Android
    稳稳的 Flutter 。
    kwanzaa
        23
    kwanzaa  
       149 天前
    你得先学客户端再去考虑“一门移动端跨端技术”。作为 web 前端跳过来算是跳坑了。
    Cbdy
        24
    Cbdy  
       149 天前
    技术选型有一个小妙招:就是选择这个领域用的人最多的,社区最活跃的,有个好爸爸的
    yazinnnn
        25
    yazinnnn  
       149 天前
    可选 kotlin+compose
    9ki
        26
    9ki  
       149 天前
    不要相信楼上的 Flutter Web, 这玩意就是个天坑, 体积巨大, 性能巨差, 不知道是怎么作为正式功能被推出的.
    a570295535
        27
    a570295535  
       149 天前
    flutter 开发的 app ,
    安卓手机大多滑动页面卡顿掉帧,不够流畅,体验比较难受。
    3dwelcome
        28
    3dwelcome  
       149 天前
    @9ki 用 flutter 都是大多客户端 native 转过来的,主攻客户端技术,他们不在乎 web 性能。

    在乎 web 性能的,那就是 React/VUE 那套,可选择移动框架很多了,又何必选个新语言为难自己。
    Removable
        29
    Removable  
       149 天前 via iPhone
    看了各位的回复,感觉答案依旧不统一啊
    reallittoma
        30
    reallittoma  
       149 天前
    @Chad0000 #10 有公司在用 Xamarin 做开发吗?找了一圈求职网站都没看到几个。我只在个人项目里用它……
    LewisW
        31
    LewisW  
       149 天前
    如果你想学移动端技术的话 我觉得学 android 或者 iOS 原生开发会好点
    i979491586
        32
    i979491586  
       149 天前
    2022 年推荐 flutter ,说 flutter 嵌套地狱的,估计写其他前端代码也跟屎似的。
    说 flutter 卡的 自己先写一个去试试 release 模式,再来云
    gongquanlin
        33
    gongquanlin  
    OP
       149 天前
    感谢各位朋友的支持回复! rn 和 flutter 这两天我抽空都装上了,简单写了几个 demo ,就目前问题简单说一下我的想法:
    react natvie:因为我本身也做前端,所以上手很快,有现成的组件库( ant design mobile ),样式也都是 css 的语法,写起来没有啥问题

    flutter:因为本身 dart 是新语言,但是语法糖看着还算简单,上手也很快,嵌套的问题在 vscode 里面编辑器会自动加注释,相对来说还好一些,主要的问题是组件不熟悉,样式不熟悉,全都需要重新学,因此写起来可能门槛高一点

    flutter 的样式写起来确实不如 css/scss 方便,可能也和个人习惯有关,flutter 本身写样式的方式,个人感觉和 compose 挺像,本质上就是调用函数。
    样式写起来不方便,看了一下可能和 flutter 的渲染方式有关,需要先转 element 再转 rederObject 最后渲染 layer 。

    不过有失必有得,这样万物基于 widget ,性能上进行优化确实比 css 可能方便一些?个人拙见

    我因为只是写了个 hello,world ,目前正在研究两者的路由、网络、样式等功能,然后再给大家个回复吧!
    Chad0000
        34
    Chad0000  
       148 天前 via iPhone
    @reallittoma #30 我们这边做 APP 的比较少,我也是在自己的项目中使用。
    LiuJiang
        35
    LiuJiang  
       147 天前
    @makelove hooks 组件
    jk0001688
        36
    jk0001688  
       138 天前 via Android
    rn 吧,会 react 无脑写 app
    moosoul
        37
    moosoul  
       129 天前   ❤️ 6
    UniApp
    这个先放弃吧,写小程序还不错,已经用 uniapp 上架了两款小程序(长期运营维护,但是编辑器还是 bug 比较多,主要是跟 HBuilderX 的一个 hot reload 有关,但是不是啥大问题,大不了重新编译一次)

    Flutter 2.0
    已上架两款应用。一款简单,一款复杂。都是社交类应用(三方服务采用的腾讯云的 IM ,现阶段 3.5 版本之后的 IM 的 flutter 插件还不错,以前的很坑)
    然后复杂应用中有一款涉及到,IM 、富文本编辑、相机、录音、实时音视频。这个时候就能发现 flutter 的各种坑了。(如果你愿意花时间折腾那可以用)
    目前坑点稍微说一下
    1. Google Flutter Plugin 中的 Camera 、Video Player 的问题,前者旋转拍照的支持有问题,0.2 版本的 bug 如今 0.9 了还未修复,后者对旋转的视频的方向支持有问题,也是 0.1,0.2 版本的问题现在 2.0 以后了还未解决。
    2. 富文本编辑器使用的 flutter quill,这个库还不错基于 flutter 的 skia 那套自己完全重绘,性能和效率还不错,但是功能性上面相对于成熟的富文本编辑器缺失太多,编辑器的基础的输入,换行,样式各种都有不少问题,因目前还比较基础很多 API 封装的不够彻底,经常有需要自己手动修改编辑器的 meta data 的情况
    3. Flutter 自身,语言上是 Dart 这个没啥好评价的,多学一门语言而已,大多数程序员都没有压力。但是 UI 构建的方式基于 Widget 的,这个 Widget 看似很完美,当你应用内自定义的内容较多的时候,你就会发现,万物不是 Widget 了,万物都是 Container ,基本组件都是自己基于 Container 去修改。看了很多文章都说 Flutter 通过 Skia 自绘了一套 UI ,保证了 Android 和 iOS 的一致性,真希望这些作者拿 Flutter 去写一个实际项目,这个一致性真的没啥用,大多数都还是需要你自定义(这个时候我就很怀念 React Native 了,反正也可以 div 一把梭啊)
    4. 三方插件上,大多数插件也是需要自定义的,我列一下我自定义的 pub 的插件
    google_plugins (主要是修改上面说的两个插件的 bug )
    flutter_wechat_camera_picker (如上,内部采用的以上两个插件)
    sliding_up_panel (有一个容器高度的 bug )
    ai_barcode (需要自定义扫描线的风格)
    flutter_quill (需要解决一些编辑 bug ,以及自定义一些 Style )


    React Native 0.59
    已上架 2 款以上应用。
    缺点还是性能问题,但是大多数基础项目,我做了这么多款项目还真没碰到性能说跟 Flutter 差距很多的地方。
    再个长时间没接触 React Native 了更多的就不评价了。


    以上对比下来
    Flutter == ReactNative >>>>>>> UniApp(做 App 用这个你就是坑自己)

    我看 RN 更新了 0.69 版本据说在原生交互方便加入了 JNI,可以直接调用原生不像以前是采用类似 json 数据通讯的方式,我准备再回归 RN 试试了。
    如果内心不够强大,项目又够复杂真的不建议 Flutter ,需要原生处理的多出你的想想。
    其实如果做到复杂项目上,Flutter 和 RN 真的 55 开,都需要你有不错的原生基础。

    最后说一下我想回归 RN 的原因
    1. JS/TS ,日常是 Nodejs 全栈,也会些一下 React 项目,语言上更熟悉。
    2. Flutter 当前主版本还算比较稳定,但是三方库一言难尽,并且样式相关的很多官方自己都没有一套很好的自定义方案,那三方库更不可能支持的有多好,大多数三方库最后为了改一些样式只能拉下来自己改库了。

    至于大家最终选用什么样的框架看是看需求吧,考虑性能直接原生,不考虑性能的简单项目除了 uniapp 任选,复杂项目如果本身也是 js/ts 那就 RN
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3462 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:11 · PVG 12:11 · LAX 21:11 · JFK 00:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.