最近人人都在聊ReactJS,Facebook也是大力支持,其旗下所有产品都全线使用React,单看列表也会亮瞎眼睛!AirBnB,Asana,Atlassian......
如此多成功案例,后台又是大佬Facebook,大有势不可挡之势。
而之前一直热捧的AngularJS与其相比,更像是在上演一部夕阳红。最美不过夕阳红,温馨又从容...
谈论技术,许多工程师总是痴迷于耀眼光环,而抛弃其业务场景。贸贸然入坑,最后不能自拔。今天我们就再来聊聊ReactJS,看看它是否真的适合你?
ReactJS作为View框架有两大优势:
一、组件化
经历过jQuery时代的都了解,jQuery的DOM操作存在很多问题。
1. DOM操作繁杂冗余;代码量和软件维护成本成正比关系,甚至于几何关系,jQuery的代码量是出了名的多,老多了!
2. 不易封装; 代码相似却不相同,逻辑简单时,封装加大复杂性,逻辑复杂时,却又极难抽离共性
3. 不易扩展;没有封装,就导致系统没有架构,没有架构何谈扩展?
ReactJS抽离共性DOM为组件,绑定数据,基本解决了jQuery时代的弊端,不得不说是前端DOM开发的一大福音。
二、虚拟DOM(Virtual DOM)
前端从诞生的那天起,就存在性能问题。JavaScript Document本身就提供了Fragment来优化DOM操作。
ReactJS虚拟DOM的运行原理和Fragment大同小异。即存在一个类似缓存的Document,通过缓存来避免大量重复的DOM更新,而换成一次性更新。
前端组件化的概念一直存在,也有很多成熟的实现,从最早Backbone中的粗粒式View,到AngularJS中强大的Directive,都是组件化的缩影。为什么单单ReactJS的组件被人津津乐道呢?
答案在于其轻量级。
轻量级有时是短板
很多人赞叹Java成熟、稳定、强大、流行、NB吊炸天,但不可否认它的重量级。我需要写一个简单的Test,先使用Maven构建,导入Spring,加入Hibernate,引入Apache Utils,配置XML,还需要.......咦,老乡,别走,我还没讲完呢!!!就因为其如此麻烦,在百度一搜一大把:spring-hibernate Example,这其实是对Java莫大的讽刺。
反过来看Python,一个py文件,就是一个应用程序,不得不感叹其小巧优美,怪不得很多人对其情有独钟!
然而,轻量级是好事吗?
Python如此小巧优美,可很多人提出:有哪些大型的系统在使用Python,这样的问题其实是在质疑其能力。
但是从没有人问这样的问题:java有谁在用?
ReactJS一如Python的优美,只有一个组件框架,即插即用,非常方便。但是很多时候,需要在前端处理复杂逻辑时,就需要自行设计前端架构。有谁因为其小巧,而愿意承受后期的复杂呢?
数据单向绑定
ReactJS为了性能考虑而舍弃双向绑定,即数据变化更新DOM,而DOM变化并不更新数据!舍弃DOM数据绑定,性能确实上了一个台阶,可是如果你要处理很多表单操作,只能呵呵呵了。
JSX模板
一直深深痛恶转换语言,一如前几年的JSF,现今的CoffeeScript,TypeScript等等。这些都是不愿意学习JS,而又不得不使用JS的人发明的。一直以来的经验告诉我,有转换就有伤害!
JSX模板是HTML和JS共存,类似写XML语言,经过JSX编译,转换为JavaScript语言,想象一下,在深入使用之后,你肯定会爆出一句:这编译器怎么这么傻X,这怎么编译成这样!!
看过以上,相信你也明白了。ReactJS就是为简单型,展示型系统所设计,类似Facebook,AirBnB,性能是最重要的,而逻辑相对简单,表单操作更是少之又少。
ReactJS也仅仅面向纯互联网业务,企业应用使用成本太高,建议放弃。如果你考虑引入ReactJS,要再三思量,ReactJS是否匹配你的业务。
目前百度上多数ReactJS的帖子,前面说的头头是道!最后一定附加Demo,测试,研究等字眼!
呵 呵 呵