Vue 和 React 的使用场景和深度有何不同
首先,其实 Vue 也完全可以全量赋值的,唯一需要的小优化就是给 v-repeat 列表一个 track-by 属性,提示一下如何判断两个对象是否是同一份数据。如果是没有复杂交互的列表,可以直接 track-by="$index" 原地复用 DOM 元素。
合理使用 track-by 的情况下,Vue 甚至可以比 React 更快(这里渲染的是 100 * 5 的数据表,每一帧都是全量新数据赋值):
dbmon (Vue)
dbmon (react)
在超大量数据的首屏渲染速度上,React 有一定优势,因为 Vue 的渲染机制启动时候要做的工作比较多,而且 React 支持服务端渲染。
需要指出的一点:React 的 Virtual DOM 也不是不需要优化的。复杂的应用里你有两个选择 1. 手动添加 shouldComponentUpdate 来避免不需要的 vdom re-render;2. Components 尽可能都用 pureRenderMixin,然后采用 Flux 结构 + Immutable.js。其实也不是那么简单的。相比之下,Vue 由于采用依赖追踪,默认就是优化状态:你动了多少数据,就触发多少更新,不多也不少。
说起 Flux 架构,FB 提供的标准实现非常繁琐,所以社区的各种造轮子版本层出不穷,目前其实还没有找到一个公认的最佳实践,而且大部分新 Flux 实现都引入了很多函数式概念,你如果对函数式编程不熟悉,光搞清楚那些概念就得花很久。
如果你真的理解了 Flux,你又会发现其实 Vue 也是可以应用 Flux 架构的。比如 optimizely/nuclear-js · GitHub 是一个 Flux 变种,他们就是同时把这个东西用在了 React 和 Vue 上面。
再谈谈开发风格的偏好:React 推荐的做法是 JSX + inline style,也就是把 HTML 和 CSS 全都整进 JavaScript 了。Vue 的默认 API 是以简单易上手为目标,但是进阶之后推荐的是使用 webpack + vue-loader 的单文件组件格式:
依然是熟悉的 HTML 和 CSS,但是可以放在一个文件里。而且你还可以使用你想要的预处理器,比如 LESS, Jade, Coffee, Babel,都可以。
然后扯一扯模板 vs. JSX 的问题。JSX 在逻辑表达能力上虽然完爆模板,但是很容易写出凌乱的 render 函数,不如模板看起来一目了然。当然这里也有个人偏好的问题。
React 的社区/组件生态比 Vue 大很多,这个是很显然的。不过说实话我很少见到现成的第三方组件完全符合我的要求。
最后,使用场景上来说:React 配合严格的 Flux 架构,适合超大规模多人协作的复杂项目。理论上 Vue 配合类似架构也可以胜任这样的用例,但缺少类似 Flux 这样的官方架构。小快灵的项目上,Vue 和 React 的选择更多是开发风格的偏好。对于需要对 DOM 进行很多自定义操作的项目,Vue 的灵活性优于 React。
---
更新:
楼下有些回答说 Vue 的核心是 MVVM 双向绑定,然后就直接跳跃到了『不适合持续工程迭代』的结论。且不说这样的跳跃太草率,这样的看法本身对于双向绑定的理解也是有偏差的。表单的双向绑定,说到底不过是 (value 的单向绑定 + onChange 事件侦听)的一个语法糖,你如果不想用 v-model,像 React 那样处理也是完全可以的。另一方面,组件间的数据传递,Vue 默认是单向的,和 React 一样。
React 本身并不存在所谓的『单向数据流』,这完全是 Flux 引入的概念。其核心还是在于避免组件的 local state,强调把 state 抽取出来进行集中的管理。没有 Flux 的情况下 React 一样会有状态难以管理的问题,其根源在于在哪里存放和管理 state,和双向绑定没有本质联系。那难道 Vue 就不能这样管理状态吗?当然是可以的,Vue 现在可以通过 egoist/revue · GitHub 和 Redux 进行配合,也可以用 Vue 专属的状态管理架构 Vuex: vuejs/vuex · GitHub ,『单向数据流』并没有 React 吹的那么神,直接因为这一点就觉得 Vue 不适合工程迭代,完全站不住脚。
属于前端框架,是目前比较流行的框架,
Vue.js 是一套构建用户界面的渐进式框架。 Vue 只关注视图层, 采用自底向上增量开发的设计。
React主要用于构建UI。你可以在React里传递多种类型的参数,如声明代码,帮助你渲染出UI、也可以是静态的HTML DOM元素、也可以传递动态变量、甚至是可交互的应用组件。
1.react基本上已经有一套遵循Flux的完整开发方案(基本上也就这一套大家默认的方式),而vue虽然有配合vuex使用,但是还有其他很多组织方式来解决,所以并不算是有固定模式,相对灵活很多,当然这个你可以看作是优势,也可以看作是不足
2.react社区还是要比vue大很多
3.react在view层侵入性还是要比vue大很多的
4.首次渲染性能,对于大量数据来说react还是比vue有优势
5.对于component的写法,react偏向于all in js,语法学习上需要下一些功夫,而vue配合vue-loader,其实在很大程度上让你不会觉得陌生--这不就是web component么。
打算新开一个个人项目,在 React 和 Vue 之间摇摆。
我之前用过的技术包括 Backbone/Angular/React , Vue 只是大概扫下眼文档。
Backbone
手工同步数据和页面真得好烦。
Angular 1.x
很久之前用过快忘记是什么体验了,只记得有点重,组件化开发很弱。 Angular 2 看了眼介绍不是我的菜且体积巨大。
React
用 React + Redux + ES 6 搞过一个项目,数据井井有条,架构比较清楚,配套也好(自动刷新不丢页面状态),只是有点繁琐。 Virtual DOM 的存在使得和真实 DOM 隔了一层有时很不方便,函数式的架构使得组件之间的通信也难处理。
Vue.js
Vue.js 一眼看上去是实用风格,这框架我在用 React 之前就注意到了,只是当时一看是个国人作品就无视了,想不到突然就火起来了。 它比 React+Redux 轻量,内建组件间通信机制,支持组件,配套也不错该有的都有,看上去挺不错的样子,只是是个人项目,不过作者很勤奋所以这可能不是问题。且看作者的一些文字发现作者视野开阔不太会把 Vue 带沟里去偏离前端大势。
再曹科赛: 首先,其实 Vue 也完全可以全量赋值的,唯一需要的小优化就是给 v-repeat 列表一个 track-by 属性,提示一下如何判断两个对象是否是同一份数据.如果是没有复杂交互的列表,可以直接 track-by="$index" 原地复用 DOM 元素.合理使用 ...
山西省13287996533: RxJS/Cycle.js 与 React/Vue 相比更适用于什么样的应用场景 - ?
再曹科赛: 先说观点,React/Vue 和 Cycle 一起用是不太合理的,因为 Cycle 本身定位是框架,定义了整个应用的代码组织方式和开发范式,那就是无论是用户事件处理还是服务端数据同步,统统用 Rx 来做,Cycle 自己也提供了偏好的 view layer...
山西省13287996533: react - native和vue哪个适合移动端 - ?
再曹科赛: 这三者中,Angular的适用领域相对窄一些,React可以拓展到服务端,移动端Native部分,而Vue因为比较轻量,还能用于业务场景非常轻的页面中.但是目前Angular应用是最广泛的,其他两个框架发展趋势非常好.
山西省13287996533: react 跟什么技术一起使用 - ?
再曹科赛: 目前react主要有2种用途;1、开发webapp,被称为react native,跟普通的开发webapp的方式相同,唯一不同的就是view层采用了react技术;2、开发手机网页,这里讲解一个github上面分享的技术,redux-react-babel-webpack.
山西省13287996533: react angular vue nodejs哪个用的最多 - ?
再曹科赛: 不吹不黑的说,你们说vue简单,其实在我看来,是比react简单,那是因为它优雅,优雅的只需要盖房子不需要和水泥…… react说好听点叫入门难,实际上就是不优雅,但是不得不承认react是真的灵活的多…… angular没用过俺也不知道……但...
山西省13287996533: vue react angular只能做单页面应用吗 - ?
再曹科赛: 引用一段vuejs官方的解释. vue对比其它框架 angular 选择 vue 而不选择 angular,有下面几个原因,当然不是对每个人都适合: 在 api 与设计两方面上 vue.js 都比 angular 简单得多,因此可以快速地掌握它的全部特性并投入开发.
山西省13287996533: angular和vue还有jquery的区别 - ?
再曹科赛: React和Vue有许多相似之处,它们都有:1.使用VirtualDOM2.提供了响应式(Reactive)和组件化(Composable)的视图组件.3.将注意力集中保持在核心库,伴随于此,有配套的路由和负责处理全局状态管理的库.React和Vue的区别:1.复杂
山西省13287996533: 相比React 全家桶,选择 Vue2 有何优劣 - ?
再曹科赛: 1. 个人 vs. 大公司,这是个常见的担忧.我其实有时候觉得一个项目人多未必就好,你如果去 Vue/React/Angular/Ember 的 GitHub issues 转转,你会发现 Vue 的未关闭 issues/bugs 是最少的,而且开过 issue 的人都知道 Vue 的 bug 通常都会在...
山西省13287996533: 和React 比起来 Vue.js 好用吗 - ?
再曹科赛: vue的上手难度更低,而且是渐进式的框架,起初可以当模板来使用.随着学习的深入可以慢慢上vue全家桶.而且是国人出品,文档详细.讲真,同类框架中,vue的文档绝对是最棒的.
山西省13287996533: Vue和React区别 - ?
再曹科赛: Vue 通过 getter/setter 以及一些函数的劫持,能精确知道数据变化,不需要特别的优化就能达到很好的性能.React 默认是通过比较引用的方式进行的,如果不优化,可能导致大量不必要的VDOM的重新渲染.Vue 使用的是可变数据,而React更强调数据的不可变.Vue更加简单,而React构建大型应用的时候更加鲁棒.