vue的优缺点优点:1.轻量级的框架只关注视图层,是构建数据的视图集合,大小只有几十kb。2.易学中文开发,中文文档,无语言障碍,易懂易学3.双向数据绑定,数据操作更简单4.组件化实现对html的封装和复用,在构建单页应用5.View,data,structure分离使得更改数据更容易,无需修改逻辑代码,只需要操作数据即可完成相关操作dom操作,但具体操作还是dom,但是它以另一种方式改变。7.运行速度更快。与react相比,它还操作了virtualdom。在性能方面,vue有很大的优缺点:1.vue不缺少入门教程,但是缺少高级教程和文档。书籍也是如此。2、Vue不支持IE83。生态环境不如angular和react4。社区不大5.吃内存(每个组件都会实例化一个Vue实例,实例有很多属性和方法)6.数据中定义的对象,实例转换时,会递归遍历转换成响应式数据.但是,我们不会使用一些响应式数据,造成性能上的浪费。vue和react有什么区别?有哪些不同的使用场景?区别:监控数据变化的原理不同。Vue可以通过getter/setter和一些函数的劫持来准确获取数据的变化,不需要特别优化也能达到很好的性能。React默认是比较引用的。如果没有优化(PureComponent/shouldComponentUpdate),可能会导致很多不必要的VDOM重新渲染。为什么React不能准确监控数据变化?这是因为Vue和React的设计理念不同。Vue使用可变数据,而React强调数据的不可变性。所以应该说没有好坏之分,在构建大型应用时,Vue更简单,React更好。数据流的不同Vue默认支持双向绑定。在Vue1.0中,我们可以实现两种双向绑定:父子组件之间,props可以通过v-model双向绑定实现组件与DOM之间的双向绑定。在Vue2.x中去掉了第一个,即父子组件之间不再可以双向绑定(但是提供了一个语法糖帮你通过事件自动修改),Vue2.x已经不鼓励了对道具进行任何修改的组件。然而,React从一开始就不支持双向绑定。React一直提倡一种单向的数据流,他称之为onChange/setState()模式。但是,由于我们一般使用Vuex和Redux等单向数据流状态管理框架,所以往往感觉不到区别。我们在Vue中通过HoC(高阶组件)和mixins组合不同功能的方式是通过mixin,在React中我们使用HoC(高阶组件)React一开始也是使用mixins,但是后来觉得这种方式侵入性太大到组件,会导致很多问题,所以他们放弃了mixinx,改用HoC。关于mixin有什么问题,可以参考这篇React官方文章MixinsConsideredHarmful,Vue一直都是使用mixin实现的。为什么Vue不采用HoC的方式来实现呢?高阶组件本质上是高阶函数,而React组件是纯函数,所以高阶函数对于React来说非常简单。但是Vue做不到。Vue中的组件是一个包装好的函数,而不是简单的我们定义组件时传入的对象或者函数。比如我们定义的模板是如何编译的?例如,声明的props是如何接收的?这些都是Vue在创建组件实例时隐式做的事情。既然vue默默的为我们做了这么多事情,如果我们直接把组件的声明包装起来,返回一个高层组件,那么包装好的组件是无法正常工作的。组件通信的区别Vue中实现组件通信的方式有3种:父组件通过props向子组件传递数据或者回调,虽然回调可以传递,但是我们一般只传递数据,使用事件机制处理子组件来实现父组件通信子组件通过事件向父组件发送消息。V2.2.0中新增的provide/inject用于从父组件向子组件注入数据,可以跨越多个层级。在React中,也有相应的方式:父组件通过props可以向子组件传递数据或者回调可以通过context进行跨层通信,这其实类似于provide/inject的作用。可以看出React本身是不支持自定义事件的,而Vue中的子组件传递给父组件的消息有两种方式:事件和回调函数,而Vue更倾向于使用事件。但是在React中,我们都使用回调函数,这可能是它们之间最大的区别。表面上模板渲染方式不同,模板语法不同。React通过JSX渲染模板,而Vue通过扩展的HTML语法渲染模板。但实际上,这只是表面现象。毕竟React不一定依赖JSX。从深层次上讲,模板的原理是不同的,这是它们的本质区别:React在组件JS代码中通过原生JS实现模板中的常用语法,如插值、条件、循环等,而Vue通过JS语法实现它是通过与组件的JS代码分开的单独模板中的指令来实现的。比如条件语句需要v-if实现react中的render函数,react支持闭包特性,所以我们导入的组件可以直接用于rendertransfer。但是在Vue中,因为模板中使用的数据必须挂在this上进行一个中转,所以我们导入一个组件后,需要在components中重新声明一次,这显然很奇怪但又不得不这样。
