前端框架用vue还是react?清晰对比两者差异


前端框架用vue还是react?清晰对比两者差异

文章插图
 
 
前言近两年前端技术层出不穷,目前市面上已经有了很多供前端人员使用的开发框架,转眼19年已过大半,前端框架领域日趋成熟,实现了三足鼎立的局面,截止到10月22日,Angular,react和vue数据统计如下图所示:
 
前端框架用vue还是react?清晰对比两者差异

文章插图
 
 
最近在学习使用框架的时候,分别使用vue和react开发了两个移动端产品,对这两个框架的学习曲线有了一些感悟,这两个都是现在比较热门的js框架,它俩在使用方式上和学习复杂度上还是有很大区别的,这里简单总结下两者的差异 。
主要从以下几个方面入手方面展开:
  • 框架的诞生
  • 设计思想
  • 编写语法
  • 脚手架构建工具
  • 数据绑定
  • 虚拟DOM
  • 指令
  • 性能优化
  • 原生渲染native
  • ssr服务端渲染
  • 生命周期函数
  • 销毁组件
  • 状态集管理工具
诞生vuevue由尤雨溪开发,由独立团队维护,现在大部分的子项目都交给团队成员打理,Vue核心库依然主要由尤雨溪亲自维护 。vue近几年来特别的受关注,三年前的时候angularJS霸占前端JS框架市场很长时间,接着react框架横空出世,因为它有一个特性是虚拟DOM,从性能上碾轧angularJS,这个时候,vue1.0悄悄的问世了,它的优雅,轻便也吸引了一部分用户,开始受到关注,16年中旬,VUE2.0问世,不管从性能上,还是从成本上都隐隐超过了react,火的一塌糊涂,这个时候,angular开发团队也开发了angular2.0版本,并且更名为angular,吸收了react、vue的优点,加上angular本身的特点,也吸引到很多用户,目前已经迭代到8.0了 。友情提示注意下vue的诞生时间,如果正好有小伙伴在面试,被问到你是从什么时候开始接触并且使用vue的,你要是回答用了5、6年了那场面就十分尴尬了 。
react起初facebook在建设instagram(图片分享)的时候,因为牵扯到一个东西叫数据流,那为了处理数据流并且还要考虑好性能方面的问题,Facebook开始对市场上的各种前端MVC框架去进行一个研究,然而并没有看上眼的,于是Facebook觉得,还是自己开发一个才是最棒的,那么他们决定抛开很多所谓的“最佳实践”,重新思考前端界面的构建方式,他们就自己开发了一套,果然大牛创造力还是很强大的 。
React 起源于 Facebook 的内部项目,因为该公司对市场上所有 JAVAScript MVC 框架,都不满意,就决定自己写一套,用来架设Instagram 的网站 。做出来以后,发现这套东西很好用,就在2013年5月开源了 。
设计思想vuevue的官网中说它是一款渐进式框架,采用自底向上增量开发的设计 。这里我们需要明确一个概念,什么是渐进式框架 。在声明式渲染(视图模板引擎)的基础上,我们可以通过添加组件系统(components)、客户端路由(vue-router)、大规模状态管理(vuex)来构建一个完整的框架 。Vue从设计角度来讲,虽然能够涵盖所有这些内容,但是你并不需要一上手就把所有东西全用上,因为没有必要 。无论从学习角度,还是实际情况,这都是可选的 。声明式渲染和组建系统是Vue的核心库所包含内容,而客户端路由、状态管理、构建工具都有专门解决方案 。这些解决方案相互独立,你可以在核心的基础上任意选用其他的部件,不一定要全部整合在一起 。可以看到,所说的“渐进式”,其实就是Vue的使用方式,同时也体现了Vue的设计的理念 。
reactreact主张函数式编程,所以推崇纯组件,数据不可变,单向数据流,当然需要双向的地方也可以手动实现,比如借助 onChange 和 setState 来实现一个双向的数据流 。而vue是基于可变数据的,支持双向绑定,它提供了v-model这样的指令来实现文本框的数据流双向绑定 。
编写语法vuevue推荐的做法是webpack+vue-loader的单文件组件格式,vue保留了html、css、js分离的写法,使得现有的前端开发者在开发的时候能保持原有的习惯,更接近常用的web开发方式,模板就是普通的html,数据绑定使用mustache风格,样式直接使用css 。其中<style>标签还提供了一个可选的scoped属性,它会为组件内 CSS 指定作用域,用它来控制仅对当前组件有效还是全局生效 。
模板和JSX是各有利弊的东西 。模板更贴近我们的HTML,可以让我们更直观地思考语义结构,更好地结合CSS的书写 。
同时vue也支持JSX语法,因为是真正的JavaScript,拥有这个语言本身的所有的能力,可以进行复杂的逻辑判断,进行选择性的返回最终要返回的DOM结构,能够实现一些在模板的语法限制下,很难做到的一些事情 。


推荐阅读