我看到知乎上很多人说React Native到现在都很多坑,要结合原生的知识才好好解决一些兼容问题或者是其他问题。
其实目前市场很多软件功能都没那么多奇异功能,都是增删改查,那么实际运用起来是不是没有那么多问题,已经可以用来开发App?
我看到知乎上很多人说React Native到现在都很多坑,要结合原生的知识才好好解决一些兼容问题或者是其他问题。
其实目前市场很多软件功能都没那么多奇异功能,都是增删改查,那么实际运用起来是不是没有那么多问题,已经可以用来开发App?
说一下个人选择的经验, 说不定对你有用:
RN(React Native)的两个特性超级具有诱惑性:
第一,省成本,用JS就可以同时完成两个端的任务,iOS和Android可以同步发版,简单的应用开发的确快很多
第二,热更新,就是不用重新提交审核(主要针对苹果审核),可以一定程度动态更新客户端功能
我做的一个应用是新闻类的,功能是爬取网上新闻,然后展示给客户端,类似(chaoxi)《今日头条》,但要简单得多。前3个版本还是OK的,尽管遇到一些问题,但整体上还是比较满意。
接下来我花了很长的时间挣扎取舍我决定放弃RN:
理由一:Android新闻类应用没有资质无法在各个分发平台发布(比如豌豆荚,腾讯应用宝, 360)
理由二:RN目前想要做的还是跨平台,虽然有一些方法只能单一平台用,很多开源控件都是将两个平台的差异性用各自的语言封装,再开放统一的JS接口。问题是如果这个功能没有开源代码,只能你自己来了,原生的知识必不可少
理由三:RN的体验会有些问题,单说iOS,比如NavigationController
RN0.4还没有最终的解决方案,动画看上去也逊色一点;还有比如你想开发个iPhone和iPad应用,RN虽然能做但是我觉得不是特别的得心用手。
理由四:RN和原声毕竟是两个不同的语言,不同语言通过桥来链接,交互有限,比如我想做一个RN和原生(WebView)共享图片缓存的功能,实现起来要困难得多
舍弃RN的理由虽然比其优点看起来多,但并不太表RN不好,RN有很活跃的社区,很多公司都在部分采用RN实现。像Airbnb似乎全是用RN做的。
我是一个iOS工程师,无论RN还是原生,我都得新学一门语言,由于Android市场无法上线,也就不急了
我强烈推荐你试一试RN,如果你会Web开发,从RN起步要容易得多
13 回答13.1k 阅读
8 回答3k 阅读
3 回答1.6k 阅读✓ 已解决
2 回答5.3k 阅读✓ 已解决
5 回答1.6k 阅读
3 回答2.4k 阅读✓ 已解决
5 回答1.9k 阅读✓ 已解决
来说说看法,供参考。
RN(React Native)的卖点与优势
跨平台
除了跨Android与iOS,实际上RN也跨了Web平台,与React业务逻辑都一样只是渲染对象的不同。
省成本
因为"跨平台"的节省时间与人力成本。
开发群体庞大
因为RN是设计给前端或JS开发群体使用的,用于开发移动App,这个开发群体可能比原本的Android与iOS开发群还庞大,对人员招募与培训有很多好处。
性能接近原生
RN必定无法取代真正以原生语言与工具开发出App的性能与灵活性,但以性能来说可以接近。操作介面或特效来说或许不足之处还很多,但也可以接近。而且一定程度上比使用WebView的Hybrid或H5开发方式的性能来得好。学习曲线比Hybrid或H5高些,比原生语言工具(Android->Java, iOS->Swift/Objective-C)低些,这是以作同样的功能所要学习的时间与基础而论,很少有人可以精通两种移动原生语言工具,通常会择一专精。
RN的劣势与不足之处
项目过于年轻,不成熟
RN最早是一个在2013年FB(Facebook)内部的黑客松项目,经过2年左右的实作,在2015.1面世,所以算一算也差不多二年的时间,一开始也只支持iOS,2015.9左右才发表支持Android的版本。在面对已经这么久的Android与iOS的开发市场,RN算是一个很年轻的项目,它的资源、教程、周边套件等等…都完全不能与现有的移动开发平台相比。当然,RN也支持不了最新的Android或iOS特性,在稳定上仍有很多不足之处。甚至在某些实作上角度来看,可能还比已经发展很久的Hybrid App或H5 App资源更少,更不稳定。
React/Redux/ES6是另一些门槛
RN是建构在React的基础之上,Redux算是React整体应用的状态管理框架,ES6则是2015年确立的JS语言新标准。对于现有的前端/JS开发群体来说,这些门槛仍然需要先跨过,没先学过是用不了RN的,这是实在话。这些门槛看起来似乎不高,但对于既有的已经使用jQuery等框架与库的开发群体来说,是一个观念的大转向,能否接受就看每个不同的需求角度,与接受程度。
跨平台所面临到的其它问题
有作过移动双平台的App经验的开发者便知,实际上有些介面是只有某个平台上才有的,有些功能在两个平台上的设计或业务逻辑是不同的。当跨平台变成一个主要议题后,要怎么调配两个平台上的操作介面,或是撰写相等功能,就变成一个重要的考量重点。跨平台需要在不同之处,取舍其中的平衡点才有办法达成。这一部份,仍然是RN一个很大的发展空间,说实在话,这部份RN还正起步而已,这类的问题要解决的可能还有很多。
RN是给哪种开发者的用的
前端/JS开发者
这是这个技术发展出来的主要对象群体,RN用的是JS语言,版面与样式用的是接近CSS语法的css-layout(现已改为Yoga)项目。所以这项技术的吸引的主要对象就是前端/JS开发者,这个群体十分庞大,根据国外知名技术讨论区stackoverflow的2016年调查,以职位区分,前端/全端/后端加起来占了46%的受访者(后端即用Node.js),而移动开发只有8.4%,当然后端与全端并非全然的是使用JS语言开发的,不过在全端中有8成是使用到JS语言,后端有5成左右使用JS语言,在移动端有29%是也是用JS语言开发的。差不多这样比较,你可以想见这个面向的开发群体就比整个专门开发移动端的群体大很多。
原本的移动端开发者
上面已经有说过了,很少有开发者能精通两大移动平台的,RN自然可以吸引一些小规模的、功能上较为简单的移动平台App开发者。这是由于跨平台与接近原生性能的优势所促使的一类开发群体。
RN的学习者建议
如果你是原本的移动(Android/iOS)开发者
嗯,大概不如你的预期,RN没那没美好与稳定,要什么没什么,实际上操作介面很多没跨平台。
我会建议你暂时先不要用在复杂的项目上,或是再观望一阵子。
如果你是前端/JS的开发者
RN是目前让你实现往移动端App开发路的较理想选择。但不需要期望太高,RN可能还没那么完备,特效、游戏、VR、AR、3D什么的,都不容易实现,基本的小应用或商务应用是没太大问题。
最后,认真地回答一下题主的问题如下:
看要作什么了。
RN仍保有与Android应用或iOS应用整合的能力,假使你要开发的应用是有一部份可以套用现成的Android应用或iOS应用才作得到的,那当然就要有原生iOS和Android的基础。
如果并没有,那大概只要学怎么打包应用,换App图示与前导图片与上架就行了。
有很多问题的,坑到处都有是实情,但也已经可以开发App了。不过,也是看你要作什么。
RN官网有一个实例App演示页,里面就有很多用RN的App,中文App有手机百度、QQ、蜂鸟众包、惠首尔、手机京东、QQ音乐、QQ空间、昨日热推等等。
新技术原本是这样,问题本来就会很多。不过用得人多问题自然就容易找到解决方式,未来也会发展得愈快愈好,全凭你要用什么角度来看或比较,有人会抱怨自然是因为对这门技术怀有一些期待,期待与实现的落差造成了不满意,当然这也不一定就是坏事,从来没有说一门技术可以满足所有的开发应用,RN今天面临到的问题是更艰难的,这些同样也在H5与Hybird App中面临到,但至少它给出了一个新的发展方向,这是至少是一种创新的作法。
RN只是提供另一个在移动端应用开发的选项,你应该更理解的是它有什么优点与缺点,以及目前它所有能作的,至少我会认为这会比较客观些。