请问 React 和 Angular 各有什么优缺点,各自又适合什么开发场景?

关注者
1,212
被浏览
298,187

33 个回答

@空空

我算是用过React没用过Angular,所以正好补充下。

首先我现在的经验是Angular和Ember都只玩过TODOMVC的tutorial,React的话自己正在写一个Chrome的App和公司的一个小项目。

最近正好有个新项目在评估用AngularEmber还是React(+Flux),我随便谈一点自己的浅见。

Angular.js

首先Angular的背后是Google(难道这就是官网被墙的原因?),所以社区基础是不用担心的,整个生态也已经是非常的完整了,从最基本的Tutorial到StackOverflow的问题数到框架本身的剖析都有非常非常多,所以从这个角度看起来Angular应该算是上手比较容易的。

不过Angular目前的问题看起来也很明显

1. 性能

同样是TODOMVC的Sample,Angular完全载入用了1.1s(

WebPagetest - Visual Comparison

)。目前我用到的基于Angular的就是Kibana,不得不说,确实挺慢的。。

2. Angular 2.0

Angular的2.0几乎是一个推翻重做的框架,估计不会有1.X的upgrade方案。所以如果现在新开始的项目采用Angular的话,会是一个很尴尬的时机。同样,如此大的改动似乎也反面印证了1.X并不是那么好。这篇文章推荐去看看

Why you should not use AngularJs

React.js

React很大的特点就是“轻”,再加上

VDOM

这个很好的idea让React非常非常快(在上面那个测试里面0.3s左右就载入完毕)。另外React和Angular一个很大的不同就是React采用的是one-way data flow。

React的缺点嘛,大概就是现在还太新了很难说将来有没有大的API变化,目前在大的稳定的项目上采用React的,我也就只知道有Yahoo的Email。所以现在很少有批评React的声音也许不是他真的就没有坑,而是那些坑还没有被踩出来而已。

还有就是React本身只是一个V而已,所以如果是大型项目想要一套完整的框架的话,也许还需要引入Flux和routing相关的东西。React的

routing

我没有研究过,但是Flux的话已经有出现一些

批评的声音

了。



总结

Angular是真正的大而全的framework,他有自己一套思路,基本你follow这个思路往里面填代码就OK。

React是一个简短有力的library,他只负责解决你某个单一的“痛点”。

对于 Angular 没有在项目中使用过, 只用过同为 MVVM 的 Vue.

我花了很多时间在 React 上, 可以看下边两个网站相关的内容

React 中文微博:

weibo.com/reactchina

React 中文论坛

react-china.org/

Angular 和 React 相同的是 Model Driven View 的套路, 自动维护 View, 减少手工状态维护.

把两者都当作是对 Backbone MVP 模式的改进的话, 上边这一点差不多的.

不同的地方是 React 采用的方案有点像函数式的做法, Component, Immutable data 等等

更着重于将 DOM 封装可以相互组合的 Component, 并且将 DOM 操作抽象为状态的改变.

这样抽象之后, 学习和编写复杂应用的成本降下来很多

React 的问题主要在它实现功能近似与 jQuery 的 DOM 操作和事件监听,

要写完整的应用需要 MVC, 对 React 来说就是后来发布的 Flux 模型,

而 Flux 并不是完整的一个框架, 只是 Facebook 发布的一套架构体系

所以要写完整的大应用估计还有不少坑要淌过去.. 在这方面 Angular 东西多多了.