最近前端大热,各种MVC框架层出不穷,大有百鸟争鸣之意。
这“百鸟”中,数ReactJS尤其火热,出身高贵,一面世就引起关注! 之后Facebook更是宣称支持构建安卓以及苹果原生应用,这对很多烦恼于多平台的企业更是一场及时雨!
但是事实真的如此吗?我在【如何选择框架】一文中讲过,做过程序员的,对一些词语根本没有招架之力,比如丝袜,滴蜡,皮鞭.....
不好意思,讲错,是跨平台,企业级解决方案,技术规范...
如果你在选择一款框架时,仅仅看官方的介绍,或者看百度上排名第一的软文,那你只能期许自己的运气一定要很好,好到踩到狗屎运,才能误打误撞选对了框架。
我作为一个地地道道的程序员,听闻ReactJS如此大热,也不免心痒难耐,经过一番学习,终于搞明白ReactJS的原理。那么就来讲讲我对于ReactJS的看法吧。
1. ReactJS不是MVC框架,仅仅是 View端技术
很多人说Web技术的未来是面向组件技术(Web Components)! 组件即类似Bootstrap框架中的JS组件,但是这类组件没有解决一个至关重要的问题:【数据绑定】!没有【数据绑定】,代码中就会充斥着操作DOM的代码,也就只能使用JQuery来手动控制界面的刷新,这是一件相当痛苦的事情。
而ReactJS就是具备【数据绑定】的组件技术,让你抽离无尽的数据操作,只需要关注界面逻辑。
ReactJS属于组件技术,仅仅实现了View, 可是对于Web开发,除了View端,还充斥着事件管理,模块化,动态加载等等。使用ReactJS,就需要手动造轮子,整合其他框架,不要认为这是一件简单的事情, 弄不好会走火入魔!
PS:目前已经有人尝试结合Backbone和ReactJS,组成新的MVC框架(http://www.iteye.com/news/30771)
2.ReactJS JSX,用XML写DOM,靠谱吗?
ReactJS在写DOM代码时,建议使用JSX语法糖,然后通过NodeJS再编译成JavaScript代码运行,虽然也支持原生JavaScript,但是写起来非常臃肿。
对于这类黑盒运行的“转换”技术,前期你都会尝到一些甜头,吃到后面才发现原来是“夹心”的,夹的还是“黄莲”。从GWT,JSF,再到Coffee Script,Demo版本无一不让人为之神往,而成功的案例却寥寥无几,几乎可以说是没有.
所以,讲起JSX,论坛上都是眉飞色舞,但在末尾都会加上一句:这是我仿照XX写的Demo!
3.ReactJS Native,打造App端原生态应用,真的能实现吗?
ReactJS Native可以针对不同的平台,可以生成原生Layout! 它不是类似Phonegap的原理,而是【learn once, write anywhere】,通俗点就是说,学会了ReactJS,针对所有平台都可以使用这个语法! 也就是每个平台的代码还是要单独写,只是编程语言是一样的而已!
要实现【learn once, write anywhere】,也要开发基于不同平台的组件库,兼容组件的API等,这也是一件大工程。目前ReactJS Native官方也声明:正在完善中... 所以要兼容多平台,这也远远不是一个成熟的解决方案。 对于将来是否能实现,不好妄言。
4.ReactJS VS AngularJS
很多人喜欢单纯的比较各种框架,Facebook官方也会讲ReactJS比AngularJS快!抛开上下文,单纯的讲快,其实是一种彻彻底底的流氓行为!
从范围来讲,ReactJS仅仅是一个View框架,而AngularJS包含MVC,依赖注入,模块化等等,本身并没有任何可比性!
讲到ReactJS的快,Facebook官方讲的仅仅是DOM的渲染速度,而代码中也隐藏了很多的猫腻,不能不让人为之遐想。
附上链接:http://www.infoq.com/cn/news/2015/06/is-react-really-fast
5.学习曲线
有一些人抱怨AngularJS的学习曲线太过陡峭,而ReactJS可以平滑过渡,就本身技术而言,这点我不否认。但是仅仅ReactJS不能搞定前端,你要顺便学习下Backbone,然后你会发现Backbone代码不太好组织,再顺便学习RequireJS....
所以,当讨论学习曲线的时候,千万不能鼠目寸光!
6.ReactJS到底还能不能用?
到目前为止,我并没有讲ReactJS的任何突出的优点,大家肯定觉得完全不能用嘛。 其实非也!
脱离业务来讲技术,本身也是一种耍流氓的行为。在选择框架时,一定要结合自身业务,如果你现在要做一个小型网站,并且之后也不会扩展,那我推荐你使用ReactJS,简单快速!
如果你要搭建一个平台,并且平台具有很强的可扩展性,那就要思之慎之!如果你要使用ReactJS Native来实现多平台,那就更要思之慎之了!
版权声明:本文为博主原创文章,未经博主允许不得转载。