React Native logo

我学习 React Native 大概三个月左右,一开始那两个月是在玩,毕竟我之前的 JS 基础不扎实,花了我很多时间才能完成一些简单的东西。例如 render 一个 list 什么的,我都要左右琢磨。

后来朋友需要我帮忙一个项目,时间非常紧,只有不到一个月的时间。然后同时还要做 iOS 和 Android,我在电话里面纠结了很久。坦白说,听了要求之后,如果我用 Swift来写,iOS 那边肯定没有问题,但是我对 Android 不熟悉,而客户肯定要求 UI 方面基本一致。如果我朋友找的 Android 开发无法跟我达成一致的共识,项目也非常危险。那个时候,虽然我只学了 React Native 两个月左右,我跟他说,还是用 React Native 吧。

满地都是坑

坦白说,一开始的时候,我感觉自己选错了。React Native很多地方都跟 native development 不一样,用的是 NodeJS 的 npm 来管理库,因为我们开始项目的时候React Native还在 0.40左右,有些库的写法跟不上的话,满地都是错误。

举个例子,这个项目需要有一个地方显示地图。我们开始估计的时候,发现 RN 有自己的 mapview,感觉应该没问题了,官方的肯定有例子。然后到我们真正用的时候,才发现第一行就说“这个 mapview 我们在0.42就不会再支持了,请用 Airbnb 的 react-native-maps”。之后我们用了很长时间都无法让地图显示在模拟器上,到后来原因竟然是因为地图需要一个 style 来保证尺寸。。。以为这样子就完了?错!后来我们要在真机上测试,又是一地的错误。例如 RTCView.m 之类的文件说被重复 declared 了,网上有人说,需要将 import 的格式修改,但是那么多个,要我全部修改的话,就太麻烦了。后来解决方法竟然是更新地图的版本。我们明明用的是 “^0.12.1”,然后竟然无法更新到 “0.13.0”版本,后来要指定要最新版本才解决了问题。

这些坑只是我这几个星期里面遇到的一两个例子。如果你心脏不好,千万不要太早就用在真项目上。

逐渐喜欢

虽然 React Native 跟 Native 开发非常不一样,但是我却越来越喜欢这样的方式。整个 app 都是模块方式存在,每个 component 有自己的life cycle, state 和 props,我如果下个项目需要用到同样的 component,只要把文件复制过去就可以直接用。

React Native 结合 Redux,配合得非常好,只要 state 有任何改动,component 的 render就会马上更改被更新的部分。

前景。。。

其实 hybrid app development 这两三年比较火。以前一开始有PhoneGap,之后有基于 C# 的xamarin,现在算是比较流行的就是基于AngularJS的Ionic和React Native。我不知道以后 hybrid 会否取代 native,但是我觉得应该会有一席之地。

我一直都是只做 iOS,以致有时候有好的主意都无法很好执行,希望用习惯了 React Native 能够帮我在 Android 方面做些小程序。