使用 React Native 有一段时间了,总体来说使用体验不太好,问题比较多。可能也是因为涉及的平台、技术比较多,配置很乱,经常因为各种工具的问题,导致无法启动或者无法调试。

今天碰到的问题也比较典型,更新代码,yarn 更新依赖,然后启动程序报错:“Tried to register two views with the same name RNCSafeAreaProvider ”,一看也不知道什么意思,看工程目录,多了一个yarn-error.log 文件,明显是依赖更新出错了,打开log,内容如下:

1
2
Trace: 
Error: EPERM: operation not permitted, unlink '...\node_modules\@babel\helper-regex\lib'

提示说没权限操作这个目录,Google 一下,发现是缓存的问题。删除 yarn.lock 文件,执行如下命令:

1
2
npm cache clean --force
yarn

依赖更新成功后,再启动项目,成功。

在 React Native 的开发过程中,混杂了 iOS, Android, Node.js, NPM, Yarn 等一堆由不同公司、团队开发的技术,这些技术都很庞大,在一起很混乱,经常出一些奇怪错误,但总的来说大部分的错误都是缓存或依赖库的问题,先尝试解决依赖的问题,很多问题就能解决。

讲到这里,提一下前几天碰到的另一个问题。项目中有用到 react-native-scrollable-tab-view 组件,在对其局部刷新时,出现页面无法显示的问题,仔细跟踪问题,最后定位到是其使用的 ViewPager 有问题,网上寻找若干方案,无果。最后打算跟进 ViewPager 的代码,转念一想,也许问题已经被社区解决了,立即登录 Github 看了下,项目最近几天有更新,把 ViewPager 升级到最新版本,重新启动,问题解决。

踩了坑,得总结点经验,最后列一下解决 RN 出错的几种方法:

1、检查依赖是否更新成功,是否有报错?

2、当然是 Google 一下,看看有没有现成解决方案。

3、去看看使用的库是不是更新了,尝试升级到最新版本试试,也许碰到的 BUG 已经解决了。(RN的库都是开源库,质量不是很高,很多问题需要在 GitHub 和代码里寻找答案。)

4、清空缓存,多试几次,仔细阅读日志,寻找解决思路。