react nativeJavaScript程序开发

一个“三端”开发者眼中的React Native

2015-08-01  本文已影响12579人  代码诗人芋头

这里是我临时写的一个React Native的试水项目,打开后等会会看到gif动画演示。
https://github.com/xinyu198736/htmljs-ReactNative 欢迎star和watch。

三端的三观

大家别拍我,起这么个diao渣天的标题是为了吸引你进来,大家不要太在意用词。先介绍下我自己,我是一个普普通通的开发者,平常喜欢自己捣鼓技术,所以涉猎比较广,一些不太常用只是摸过几腿的技术就不说了,至少现在每天都摸的技术大概有三端:前端,服务端,客户端。这篇文章是我作为一个“三端”开发者角度对React Native的一点点看法,不会太具体,但是希望对大家的认识能有个不同角度的指导。

作为一个ios开发者,我的经验大概有2年左右,虽然不是专业选手,但是一个app开发需要涉及到的东西基本都接触过,坑也趟过不少,其实ios开发的体验还是不错的,熟练了以后构建app还是很快的,不过里面也有不少麻烦的地方,例如:

而对于前端来说,还会对ios的开发有些其他的疑问,例如:

而React Native其实正是迎着这些问题而上,然后结合三端的优点,搞出来的一个移动端开发框架。

且来看下他有哪些动人之处。

美丽动人的RN

我拿起React Native的第一次,就被它彻底打动了,抛开他的语法,对于前端来说奇奇怪怪的jsx(后面会讨论),它的确解决了我作为一个三端工程师在不同技术端切换的时候备受的一些困扰,所以那天晚上,我完全没睡着,翻来覆去的,然后跑到朋友圈发了句:“激动人心的技术,未来的发展方向”。第二天早晨,提前一两个小时就醒过来,继续写了几句RN,那酸爽,那心情。可能作为一个纯粹的前端或者纯粹的ios开发,很难理解,但是对于一个游走在三端的工程师,我看到了一个真正意义上的统一方案,而且,它足够简单。

React Native的上手很快,去看一下它的文档,总共就一点点:入门,组件,功能。每个页面都短短的一两页,的确就是这么简单。不过这里我并没有打算把这篇文章写成一篇入门教程,所以并不会教你如何构建一个简单的RN应用。

大概总结来,React Native让我觉得值得一提的动人之处:

1.把cocoa里面的controller和view统一成了component,其实RN里只有component这个组件概念,既可以扮演页面级别的组件(controller),也可以扮演一个模块级别的组件(UIView)。入门门槛降低了很多。

  1. 动态绑定,这个React的基本功能,被带到了客户端开发中来,数据和视图是动态绑定的,数据发生变化,视图会跟着变化,很多操作视图的代码都可以省略了。
  2. 引入了类似于CSS(一个子集)的样式管理,可以内嵌到模块,也可以全局使用,定义样式变得非常简单通用。
  3. 引入了Flexbox布局,把ios本身复杂的AutoLayout简化,使用很方便,学习起来也更简单。
  4. 引入了方便的npm管理,有大量现成的nodejs包可以用(例如moment,underscore等常用模块),还可以把自己项目模块搞到内部npm上做通用组件,另外,npm上还有不少别人写的react native的插件。例如下面这个。
  5. 第三方组件里有一个可以把icon font引入项目的组件,可以在任何显示图标的地方直接用icon font显示,灰常方便。
  6. 调试很方便,一次编译后,每次改了js代码,只需要在模拟器里command+R即可重新加载代码。有问题会直接报错,里面有代码行数等详细信息。
  7. 完整封装了各种js内置的方法,例如:setTimeout,setInterval,XMLHttpRequest,localstorage,console.log等,都是用oc原生方法封装的。
  8. 引入ES6的支持,可以使用各种新特性,例如最常用的箭头函数,解决this作用域乱套的问题。

一口气列举出这么多动人的地方,ReactNative这姑娘还真是不一般,简直校花级别。(小插曲,我觉得React性格就是个姑娘,感性而简单,而Angularjs则像是一位硬汉,笨重但是踏实而且很全面)。不过,人无完人,现阶段ReactNative也有不少缺点,有些缺点可能会非常制约他的发展,急需改进,不过还好RN目前只是开发阶段,并不是正式版,该有的都会有的。

并非完美无瑕

我看来,目前ReactNative至少有这么几个比较大的问题:

有些问题,随着时间的推移会慢慢解决,有些问题,则很难说,例如开发方式的问题。

对前端开发和客户端开发意味着什么?

ReactNative一出来,有的人一头钻进去开始研究,大部分人却只是稍作了解,然后就投入到了论战的圈子里。例如大家对React的jsx开发方式的批判,对React组件化开发方式的批判。其实还是那个问题:任何脱离场景的技术讨论都是耍流氓。React并非万能药水,它的出现不是要大一统整个前端界的所有问题,它事实上只是为了解决一小类问题,所以不要指望你的产品能够用React来解决那些他并不擅长的问题。而对于ReactNative来说,其实我觉得这正是体现React价值的一个非常吻合的一个场景。React在这个问题中扮演的角色,就是上面讲到的他解决的那些问题,足够多,而且很完美,这就是他存在的价值,不容否认。

所以,大家要从理性的角度去看待新技术,不要一味排斥,不要套用现有的思维和场景。当你用这样的态度去看RN,你就能看到他的优点和缺点,自做抉择。

我从一个前端的角度来看ReactNative,有这样的感觉:

从一个客户端开发的角度来看:

未来的开发模式?

最近只是在试水,踩坑,然后我真的准备在公司里把这个事情推动起来,因为我觉得它的确是有意义的,对开发效率有非常明显的提升,不过现阶段还只能是尝试,毕竟它没有发布正式版,然后还只有ios。不过踩坑也是为了积累,正式版发布后我们就可以快速切入了,到时候就会走的快人一步。

不过可以想象一下未来在生产环境的开发模式,跟NodeJS用来做中间件类似,其实RN最后应该会扮演一个承接前端业务的角色,这部分开发工作,可以是前端来做,也可是客户端来做,主要是用基础组件完成业务开发,其实就类似于中间件的形式。

而客户端开发的主要工作是构建基础组件,封装一些原生桥接的组件供RN使用,基本上是通用组件,应该是一个全公司级别的客户端架构组的概念。

前端做表层业务 + 客户端做底层组件支持。Perfect,还真是有点期待呢!

不扯蛋,埋头去学

不要总是试着去评论一个技术,而是在大家都在学习的时候赶紧迎头赶上去,学习总不会白白浪费的,你看那些大牛,虽然他们以前学习的技术一直在不断被淘汰,但是他们啥时候掉过队。

列一些资料:

看个差不多就先试着写个app出来,边做边学,乐趣无限

另外欢迎加入ReactNative QQ群:456662818

上一篇下一篇

猜你喜欢

热点阅读