2018-8-12 我(@糖醋陈皮)弃用 React Native 的理由

这篇文是什么?

用亲身经历奉劝你不要用 React Native (0.56)

这篇文对谁有用?

打算用 React Native 做移动端 App 的程序员。
(其他人就不推荐看了,不希望浪费你的时间)

背景信息

这篇文写于 2018年8月12号。React Native 最新版是 0.56

顺带一说

2018年8月的最近两个月(不记得具体什么时候)
Udacity 和 Airbnb 也宣布弃用 React Native 了

先讲结论:为什么不推荐用 React Native?

我的理由是:

  • 跑起来难
  • 写起来烦(包括升级)
  • 打包也烦(各种报错)

我的整体心路历程:

  • 唉呀妈呀能拿 Javascript 写 App 太牛了,而且不是 WebView 性能估计会不错
  • 2017年6月写了第一个 App (CC 速成班)因为很简单,就是个列表,没什么感觉,没什么吐槽的
  • 2017年大概12月写了第二个 App (bigjpg 的 安卓 App)
  • 开始感觉随便写点什么都要到处找社区组件,乱七八糟的(试试这个,试试那个,很多时间都浪费在了尝试不同的组件,看文档)状态管理用 MobX,多语言用 i18nNext 还是什么,从相册里选图片又用了个什么模块忘记了,
  • 一阵虐之后,终于 App 完工了,感觉放松了
  • 中间断了6个月以上没有再碰 RN 了。去做 Web 开发了。本来 App 开发就不是我的主职
  • 重新回来写 RN ,干,跑不起来了,光配置 Android Studio 下载各种东西,处理各种错误就花了我周日一个下午。
  • 妈蛋打包又报错
  • 不想用了,心累

我用 React Native 写过什么?

备注A:CC 速成班是自己的 App,包括点子,App,后端,设计,所有东西都是一手包办。
备注B:bigjpg Android App 是给客户写的。客户负责后端,我负责 App。
备注C:这两个 App 都只打包上架了安卓版,没弄 iOS 因为嫌弃麻烦

正文

直接说开发体验吧,总的来说就是烦,很烦。

1. 跑起来难(隔几个月回来之后)

背景:一个 App 写了之后隔几个月回来要改点东西
因为 Android Studio 加它下载那些乱七八糟的东西,轻轻松松10G20G甚至更多。
(在写这篇文章时,Android Studio 最新版是 3.1.4)
对于我 256G 的硬盘是无法忍受的(Macbook pro),我主职不是 App 开发,总不能一直让它占着位置,下次用我都不知道是什么时候了。所以弄完就都删掉了。所以几个月之后回来弄,又要配环境。

重新下载&安装&配置 Android Studio。然后各种报错。报错 read timeout 啊。
报错 gradle 找不到 3.1.1 什么的。
弄各种东西。不断谷歌不断 Stackoverflow 查各种报错信息。复制黏贴跑一些自己半懂不懂的命令,改一下 gradle.build 还是什么的文件,企图解决问题。感觉就是自己在瞎试。
一个周日的下午就这么没了。干

2. 写起来烦

写的时候感觉整个 RN 生态圈很"野生"。就是不停在找各种组件来解决问题。
然后这些组件 Github Star 都是几十个几百个这样。或者1000多一丢丢,就是范围很大。会感觉 Star 少就不靠谱。
特别是写 bigjpg 的安卓 App 的时候。
比如要做多语言,就找 i18n 组件,去谷歌搜,看看有什么,然后试,看文档。
总之就是很费时间,在不同选择中费时间。可能试了1,2天发现另一个更好。
要做状态管理,又去看 MobX(不想学 Redux)
要从相册里选图片,又去看 react-native-fetch-blob
进度条用 react-native-progress。
等等等等

反正就是:
找,看,试。
找,看,试。

给你看看我的 package.json
111

3. 打包也烦

各种奇葩的错误。然后复制黏贴错误信息去搜。
然后在 Android Studio 里这里改改那里改改

4. 还有啊

各种 break change, 每次升级都很糟心,体验非常糟糕。
比如我从 0.55 升级到 0.56。
就特么一个什么小的升级。55到56,又不是 55 到 1.0
这里坏那里坏,要引入一个什么 babel-7 什么
最后无奈又退回 0.55,浪费了1个小时+。干。我的时间这么不值钱吗?就这样来浪费啊?

5. 还有啊

都这么久了,我记得 RN 是2013年开源的,都2018年了,才 0.56。
等正式版 1.0 出来我觉得是不可能了,我预计2020年左右 RN 就会挂掉。或者被替代掉,比如 Flutter

总结

用 RN 开发所节省下来的时间,全部都浪费在了解决 RN 的各种报错信息上了。
还有就是为了解决问题去找和尝试各种库。

最后

希望这篇文给你提供了一定参考。RN 是个坑啊。别跳。

还有说明一点,我这里只是吐槽作为一名开发者,我亲身使用 RN 的开发体验多么多么糟心,
这种糟心主要是整体的生态(组件)。使用的体验(打包,配置环境,调试)
纯粹写代码的话用 React 来写界面还是挺 OK 的体验。

这是个客观吐槽,不黑背后的人。
我本身对 Facebook 愿意做出这种尝试还是觉得非常勇敢的,
至少是尝试过了。我也衷心希望他们未来能把 RN 做成功(但现状的确不好)

仅仅就目前来看,RN 0.56 这个阶段绝对不适合拿来给公司用。
你说做个个人项目,没什么要求,也没有上级给你不断出修改需求。那没关系。但如果是正规公司。
比如你们公司的产品就只是一个 App,然后打算做社交,电商还是什么其他鬼,
用 RN 真的不行。

顺带贴一个知乎回答,里面的更全面:

react native 都有什么坑?
https://www.zhihu.com/question/280563921/answer/438845340

2018-8-12 我(@糖醋陈皮)弃用 React Native 的理由
Share this

Subscribe to 1c7 的博客