首届官方 React Native "吐槽"大会?

2,809 阅读7分钟

郑重声明:之前我的一些文章,被某些培训机构无情地、批量地、搬运到了他们各渠道的账号中,并且添加了很多营销性质的内容,会让很多读者以为是我发的。所以特意在此特别声明,希望读者朋友们不要被坑了。我只会在我的公众号 Marno 和掘金发布文章,偶尔也会发知乎。而且我的文章禁止任何形式的未授权转载。

如果大家有看到抄袭的可以马上通知我,我一定会拿起法律武器,维护自身!之前没太在意,想着自己读者不算多,但是最近看到有公众号博主因此被起诉了的,所以觉得还是有必要注意一下。

导读

昨天 React Native 团队在社区 github 仓库的 Issues 里发了一个话题,《What do you dislike about React Native?》,中文就是说,React Native 现在还有哪些地方让你不满意的?官方搞这个话题,难道是为了帮助被 RN 折腾已久的人们排解一下负面情绪么?哈哈~

我心想让人夸不容易,但是让人吐槽还不容易么?本来以为这个话题会被瞬间攻陷,但实际还是有点意外,截至我写文章的时候也只有 13 个回复而已。当然,好像还有些回复是被官方秒删了

我把这些回复都看了一遍,有一些确实是在使用 RN 的过程中,让人觉得比较恼火的地方。下面我随便挑了几个我觉得还不错回复翻译一下,不知道这些问题是否也在同样困扰着你呢?欢迎大家在下方留言讨论。

准备好了么?RN 非官方皇-家翻译来啦~

1.实时重载引起问题

原文:

在用了 Typescript 后,我必须经常重载我的应用。当使用实时重载时,应用确实重载了,但是却显示红屏报错了,提示Unable to find module for EventDispatche。这个情况已经出现有一段时间了。实时重载的问题,再加上热重载也经常不稳定,就会让人在开发时候觉得很恼火。这也会导致 Xcode 打印很多没用的日志,还有很多其他相关的类似问题。

Marno:

确实是这样的,实时重载和热重载经常会导致一些问题,红屏也就算了,打不了手动 reload 下,可时不时的就让 packager 挂了,就非常难受了。

2.吐槽四连

Marno:

这个哥们就显得有点激动了,来了个四连发,看来是“受迫害”已久了,哈哈哈~隔着屏幕都能感觉到他在使用 RN 时的心情。他的这几个评论我就不一一翻译了,不过感觉他应该是不怎么懂原生开发的,所以会有这些问题。

可能对于很多 Web 转 RN 的人来说都会遇到类似的问题,比如原生项目的配置之类的,但这对于原生转 RN 的人来说又都不是问题,所以可能官方并没有太在意这点,这对于一些新手来说也显得有点不太友好。

不过我觉得这些问题并不要紧,不去完善也没有什么问题,当务之急还是把更多精力集中到发布 v1.0 版本上。

3.扩展 cli 功能

原文:

在启动 packager 之后,我希望可以通过命令行来控制 App 的运行。比如可以通过命令行控制实时重载,开启 debugger 之类的。

这些功能会提升开发体验,现在这种通过晃动手机或者按快捷键打开来 Dev Menu 的方式是非常有争议的。

可用的命令应该在你运行 react-native start 之后就提出出来,比如:

Metr Bundler ready.
Loading dependency graph, done.

To hot reload press "r"
To restart the app press "R"
To toggle debugging mode press "d"

Marno:

这个是目前被点赞最多的回复了,简而言之,就是他希望可以通过命令行控制应用重载、打开调试这些。我也觉得现在这种通过晃动手机打开 Dev Menu 的方式特别麻烦,有时候手都快晃断了,菜单还没打开,或者晃了半天菜单打开了,可一停下的时候一不小心碰到屏幕就给弄关上了。而且老这么在办公室晃动,也有点太…

所以我是很赞同他的想法的。虽然不知道能不能通过命令行实现,但是至少可以提供个设置项,允许把常用的几个操作悬浮在屏幕上啊。

4.Expo!!

原文:

认真脸.jpg,现在这种通过 expo 初始化和运行项目的方式一点都不酷,不要误解我,并不是说我不喜欢 Expo,而是它太过于沉重了 ,无论你的项目多简单,用了 Expo 后打个包都要 20M 起步了。

Marno:

这位兄弟就有点“过分”了,谁让你必须用 Expo 了呢?觉得太占体积可以不用啊!不过话说回来这个问题也确实存在,也一度困扰了我很久,那段时间想把项目精简一下,所以搜了下有没有精简Expo 的办法,后来还是官方论坛找到了 Expo 官方回复,说目前没有任何办法精简的。

不过好在他也认识到这个问题了,所以从 SDK32 开始就在重构了。从最近发布的 SDK33 来看,变化还挺大的,把很多非核心的功能移到了单独的仓库中,引用的时候就不能直接 import XXX form 'expo' 了,要通过指定的模块引入,这么做就是为了减小体积的。

5.快用 Swift 吧!

原文:

我认为这样做有利于很多 JS 开发者(至少对我而言)快速的浏览 iOS 的原生代码。因为比起 Swfit 或者其他现在化编程语言来说,Objective-C 不太利于阅读。另外,现在也有很多 iOS 原生项目也在使用 Swift 进行开发了。鼓励在 RN 中使用 Swfit 可以使得调试原生或编写代码变得相对简单。

我个人建议 RN:

  1. 将通过 CLI 生成的 AppDelegate.m, AppDelegate.h 还有 main.m 文件改为用 Swift 实现。像 Flutter 就提供了可以选择使用 OC,Java 或者 Swift,Kotlin 来初始化项目的功能。
  2. 鼓励更多的社区仓库使用 Swift 写 iOS

Marno:

赞同,赞同,赞
快使用 Swift,哼哼哈!
Swift,一时用一时爽,一直用一直爽!

6.我要内置导航器

原文:

现在的 React Native 没有内置一个合适的原生 navigation 库,应该搞一个可以使用 native 线程显示页面切换动画的导航器,而不是必须通过阻塞 js 线程。

Marno:

哈哈哈~天下苦 navigation 久已,不过现在已经好多了,基本被 react-navigation 一统天下了。刚开始的 RN 是内置了导航器的,而且搞了还搞了不止一个方案,但是效果都不怎么理想。与此同时社区出现了一些好用的导航器,尤其以 react-nativetion 为首

所以后来官方也就放弃挣扎了,心想既然社区做的好,那就用社区的吧,这才慢慢把导航器从内置代码中移除了。这哥们儿应该是用上 RN 没多久,所以才发出了这样的吐槽吧。而且交给社区维护,可以快速迭代,快速发版。这要是内置的出了bug,那得等多久才能有官方修复啊!


一不小心就写了 3000 字,太长了也没人看,所以还有一些其他回复,我就不挨个翻译了。如果感兴趣的话,可以去原文看下,当然也可以去回复一些你觉得不喜欢的地方,至于官方会不会改呢,雨女无瓜!哈哈哈~也欢迎大家在下方留言。

讨论地址: github.com/react-nativ…