vue和react,angular的区别
1.Vue是 是一套构建用户界面的渐进式框架。最大的优势,就是实现了数据的双向绑定,而React的数据流动是单向的。2.React中是把html和css全都写进js中。而Vue采用的是模板,就是在html中写css和js,最后再用webpack和vue-loader进行打包,这种编码方式对于初学者而言是很舒服的。3.在React中要想更新状态,必须调用setState方法,而在Vue中只需要通过t
1.Vue是 是一套构建用户界面的渐进式框架。最大的优势,就是实现了数据的双向绑定,而React的数据流动是单向的。
2.React中是把html和css全都写进js中。而Vue采用的是模板,就是在html中写css和js,最后再用webpack和vue-loader进行打包,这种编码方式对于初学者而言是很舒服的。
3.在React中要想更新状态,必须调用setState方法,而在Vue中只需要通过this的某种方式去更新state中的数据,这种方式更加方便。
4.Vue会跟踪每一个组件的依赖关系,不需要重新渲染整个组件树
5.React严格上只针对MVC的view层,Vue是MVVM模式
6.监听数据变化的实现原理不同
7.Vue通过 getter/setter以及一些函数的劫持,能精确知道数据变化。
React默认是通过比较引用的方式(diff)进行的,如果不优化可能导致大量不必要的VDOM的重新渲染。为什么React不精确监听数据变化呢?这是因为Vue和React设计理念上的区别,Vue使用的是可变数据,而React更强调数据的不可变,两者没有好坏之分,Vue更加简单,而React构建大型应用的时候更加的棒。
8.组件通信的区别
Vue中有三种方式可以实现组件通信:父组件通过props向子组件传递数据或者回调,虽然可以传递回调,但是我们一般只传数据;子组件通过事件向父组件发送消息;通过V2.2.0中新增的provide/inject来实现父组件向子组件注入数据,可以跨越多个层级。
React中也有对应的三种方式:父组件通过props可以向子组件传递数据或者回调;可以通过 context 进行跨层级的通信,这其实和 provide/inject 起到的作用差不多。React 本身并不支持自定义事件,而Vue中子组件向父组件传递消息有两种方式:事件和回调函数,但Vue更倾向于使用事件。在React中我们都是使用回调函数的,这可能是他们二者最大的区别。
AngularJS (Angular 1)
Vue 的一些语法和 AngularJS 的很相似 (例如 v-if vs ng-if)。因为 AngularJS 是 Vue 早期开发的灵感来源。然而,AngularJS 中存在的许多问题,在 Vue 中已经得到解决。
复杂性
在 API 与设计两方面上 Vue.js 都比 AngularJS 简单得多,因此你可以快速地掌握它的全部特性并投入开发。
灵活性和模块化
Vue.js 是一个更加灵活开放的解决方案。它允许你以希望的方式组织应用程序,而不是在任何时候都必须遵循 AngularJS 制定的规则,这让 Vue 能适用于各种项目。我们知道把决定权交给你是非常必要的。
这也是为什么我们提供了一个基于 Vue.js 进行快速开发的完整系统。Vue CLI 旨在成为 Vue 生态系统中标准的基础工具。它使得多样化的构建工具通过妥善的默认配置无缝协作在一起。这样你就可以专注在应用本身,而不会在配置上花费太多时间。同时,它也提供了根据实际需求调整每个工具配置的灵活性。
数据绑定
AngularJS 使用双向绑定,Vue 在不同组件间强制使用单向数据流。这使应用中的数据流更加清晰易懂。
指令与组件
在 Vue 中指令和组件分得更清晰。指令只封装 DOM 操作,而组件代表一个自给自足的独立单元——有自己的视图和数据逻辑。在 AngularJS 中,每件事都由指令来做,而组件只是一种特殊的指令。
运行时性能
Vue 有更好的性能,并且非常非常容易优化,因为它不使用脏检查。
在 AngularJS 中,当 watcher 越来越多时会变得越来越慢,因为作用域内的每一次变化,所有 watcher 都要重新计算。并且,如果一些 watcher 触发另一个更新,脏检查循环 (digest cycle) 可能要运行多次。AngularJS 用户常常要使用深奥的技术,以解决脏检查循环的问题。有时没有简单的办法来优化有大量 watcher 的作用域。
Vue 则根本没有这个问题,因为它使用基于依赖追踪的观察系统并且异步队列更新,所有的数据变化都是独立触发,除非它们之间有明确的依赖关系。
有意思的是,Angular 和 Vue 用相似的设计解决了一些 AngularJS 中存在的问题。
Angular (原本的 Angular 2)
我们将新的 Angular 独立开来讨论,因为它是一个和 AngularJS 完全不同的框架。例如:它具有优秀的组件系统,并且许多实现已经完全重写,API 也完全改变了。
TypeScript
Angular 事实上必须用 TypeScript 来开发,因为它的文档和学习资源几乎全部是面向 TS 的。TS 有很多好处——静态类型检查在大规模的应用中非常有用,同时对于 Java 和 C# 背景的开发者也是非常提升开发效率的。
然而,并不是所有人都想用 TS——在中小型规模的项目中,引入 TS 可能并不会带来太多明显的优势。在这些情况下,用 Vue 会是更好的选择,因为在不用 TS 的情况下使用 Angular 会很有挑战性。
最后,虽然 Vue 和 TS 的整合可能不如 Angular 那么深入,我们也提供了官方的类型声明和组件装饰器,并且知道有大量用户在生产环境中使用 Vue + TS 的组合。我们也和微软的 TS / VSCode 团队进行着积极的合作,目标是为 Vue + TS 用户提供更好的类型检查和 IDE 开发体验。
运行时性能
这两个框架都很快,有非常类似的 benchmark 数据。你可以浏览具体的数据做更细粒度的对比,不过速度应该不是决定性的因素。
体积
在体积方面,最近的 Angular 版本中在使用了 AOT 和 tree-shaking 技术后使得最终的代码体积减小了许多。但即使如此,一个包含了 Vuex + Vue Router 的 Vue 项目 (gzip 之后 30kB) 相比使用了这些优化的 angular-cli 生成的默认项目尺寸 (~65KB) 还是要小得多。
灵活性
Vue 相比于 Angular 更加灵活,Vue 官方提供了构建工具来协助你构建项目,但它并不限制你去如何组织你的应用代码。有人可能喜欢有严格的代码组织规范,但也有开发者喜欢更灵活自由的方式。
更多推荐
所有评论(0)