react.js,angular.js,vue.js学习哪一个好?

今天看了几篇关于这三个主流框架的PK,如标题:react.js,angular.js,vue.js学习哪一个好?相信每一个人都有这种问题。前端

如今的前端框架层出不穷,做为前端开发者何去何从?fackbook的react.js盛世火热,react native打开了JS占领android和ios领地,让JS变的无所不能。angular.js背后有谷歌,我的感受过重了,相对而言更喜欢vue,可是实际选择哪一个更好呢?总不能一下都学了也没这个精力啊那么当你读完这篇文章或许你就有答案了!vue

对于初学React者。必定认为这玩意真难学,还很差写,还不如原生JS写的6呢。没错起码我如今是这么以为的,没准之后会发现它的好呢也说不定。先来讲说都有的感想:react

认为ReactJS在真正开发大型复杂系统的时候并很差,首先一点就是,一个完整页面的HTML模板被彻底碎片化了,被分散到一个个的Component里,这样的话,UI Designer和Dev根本没有一个统一的视图去协做。android

那么,徐飞给你回答了这个问题,往下看:ios

咱们学一个东西,一般两个目的:web

1.为了解决现有的问题前端框架

2.为了解决未来可能会有的问题框架

因此,在学这些东西以前,先必须了解,它们是用来解决什么问题的。函数

Angular,React,Vue,这三者其实面对的是同一个领域,那就是Web应用,什么是Web应(前端作的都是web应用包括移动端)组件化

这三者中,Angular的适用领域相对窄一些,React能够拓展到服务端,移动端Native部分,而Vue由于比较轻量,还能用于业务场景很是轻的页面中。

在Web应用中,咱们须要解决的问题能够概括为三类:

状态
组织
效率
1. 状态

在一个业务界面中,咱们可能会根据某些数据去生成一块界面,而后经过界面上的某些操做,改变一些数据,从而影响界面的另一些部分。

这里面就存在两种关系,一种是从数据到界面,一种是从界面到数据。可以描述界面当前情况的数据,就能够被称为状态。

若是不对状态做抽象,极可能会致使逻辑的混乱,好比说,一个地方点了,要改多个地方,这种代码直接写,很容易写乱的,因此,不一样的框架采用不一样的方式进行了处理。

好比说MVVM流的Angular和Vue,还有Avalon,Regular,Knockout,都是走的这一流派,经过相似模板的语法,描述界面状态与数据的绑定关系,而后经过内部转换,把这个结构创建起来,当界面发生变化的时候,按照配置规则去更新相应的数据,而后,再根据配置好的规则去,从数据更新界面状态。

React走的是另一个流派,就是所谓的函数式,在这个里面,推崇的是单向数据流:给定原始界面(或数据),施加一个变化,就能推导出另一个状态(界面或者数据的更新)。

在这里须要额外提一下ReactiveJS,它的理念又有所不一样,是基于Reactive的。

2. 组织

刚才这些,均可以看做是知足最基本的需求,那就是业务的正确性。在这以后,就有另外的诉求了,首当其冲的就是整个业务代码的组织。

所谓组织,指的是两个方面,一方面是模块关系,另外一方面是业务模型。

咱们刚才提到组件化,整个应用造成了一个组件树,组件之间可能会须要通信,它们通信的内容多是简单的界面事件,也多是业务含义较深,可以牵一发而动全身的。界面是怎么来的?是由初始界面加上状态造成的,为了可以反映界面的变化,咱们必须使得对业务模型的每个扰动都收敛到确切的状态,因此,这也就是Redux这类东西的意义所在。

再插另一句:不少人吐槽Angular大而全笨重,吐槽React全家桶,但其实世界上大部分人是没有框架整合能力的,小而美的库最后整合了,在面临各类业务需求以后不断引入新模块,也仍是一个大而全的方案。在绝大部分场景下,仍是有一整套标配模块比较好。你看ExtJS他也单独提供ExtCore模块,但不但竞争不过jQuery,连mootools和prototype都竞争不过,用它的人几乎都是用全方案的。

3. 效率

效率也分两种,一种是开发效率,一种是运行效率。

咱们前面提到,组件化,这是提高开发效率的一种手段,在组件化这个点上,各路框架的组织方式大同小异,反正最终都是组件树。具体到单个组件的实现上,我我的是倾向于MVVM流的,以前作过对比,MVVM系的代码量会少一些,开发效率稍高一点。

其中,Angular由于实现的特殊性,有做用域继承之类的双刃剑黑魔法,开发效率的不稳定因素要高很多,深入理解的人用起来效率很高,不理解的用了处处是坑。

再看运行效率,这里面,Angular是较低的那个,主要在于数据变动检测方式,但这也不是绝对的,在部分场景下,脏检测未必就没有优点,这个记得@郑海波论述过。

运行效率的另一面主要是建立和修改DOM,在建立上,你们是没有太大差别的,而在修改DOM的时候,React独创的虚拟DOM有很大优点,因此其余框架内部实现也在逐渐借鉴。

若是看到这里,极可能你会疑惑,题目问的明明是学哪一个好,我说这些是什么意思?

我用这些篇幅说明了Web应用的业务开发中存在哪些麻烦,每种技术又是来解决什么痛点的,这样,你能够按照本身的需求去,结合业务场景进行分析,而后选择须要的挨个学下去。

其实学API之类的很快,仍是要把本身业务中的难点想清楚,带着问题去学,带着需求去学,学思想重于学使用,必定能事半功倍。

引用尤雨溪的话:

想要只学一个一劳永逸,那是不可能的。好好打基础,而后多尝试不一样风格的框架,由于只有尝试事后才能理解好比@徐飞提到的各类权衡,也只有尝试事后才能知道哪一个能真正提高本身的开发效率。说没精力,那是借口。

跟你们共勉一句话:

对不少人来讲,技术都不是一辈子的职业导向,那么,提高本身的眼界,站在更高的角度思考问题就显得尤其重要,从本身,到团队,公司,再到整个业界,眼界宽广了,技术也就是你的左膀右臂。——陈韬

相关文章
相关标签/搜索