前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Vue 和 React 有什么不同?

Vue 和 React 有什么不同?

作者头像
前端西瓜哥
发布于 2022-12-21 11:46:39
发布于 2022-12-21 11:46:39
2K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,我是前端西瓜哥。今天的文章简单探讨一下 Vue 和 React 的不同。

本人 Vue2 和 React 都用过,但不熟悉 Vue3,没用它做过项目。

其实我对这两大框架也没有认真钻研过它们的细节,也就是工作上用它们写一些简单业务,或偶尔看看相关的博客文章,但还是有一些浅显的认识的,写下来记录一下。

Vue 和 React 都是用于构建 UI 界面的流行框架。

它们的哲学也有很多相似的地方,我们可以认为这些特性是流行前端框架的一个趋势。它们是:

  • 组件化。将结构、样式、脚本进行耦合,让界面一部分区域能够独立出来,并可以提供复用;
  • 声明式。摒弃了 JQuery 那种手动操作 DOM 的刀耕火种的方式,而是通过声明一些状态,当状态改变时自动更新 DOM
  • 虚拟 DOM。虚拟 DOM 是对真实 DOM 的模拟,但比真实 DOM 轻量,用作新旧树对比计算出补丁。此外虚拟 DOM 作为真实 DOM 的抽象,让跨平台成为可能,不同平台实现自己的虚拟 DOM 即可。
  • Hook。React 带来了 Hook 概念,用于管理状态,并成为了潮流。

用法区别

不管如何,Vue 和 React 是两个不同的框架,所以在用法上是有很多不同的。

列一些用法上的区别。

组件 props

Vue 组件,表现上更接近原生 DOM 节点,你在上面加原生的 class、id、style 等 props,是会被添加到 Vue 组件的根节点上的,添加 style 和 class 会比较方便。

而 React 组件的所有 Props 你都需要自己处理,像是 style 和 className 这些 props 是要自己手动处理的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function Component (props) {
  return (
   <div style={props.style} className={classNames('app', props.className)}>
      // ...
    </div>
  )
}

渲染

Vue 的渲染是基于模板(Temple),写起来更像是 HTML,对新手比较友好。

React 则是用 JS 通过嵌套的 React.createElement 来描述 DOM。因为用 React.createElement 比较繁琐,React 推出了 JSX,对 JS 扩展了一些语法,能够使用接近 HTML 的写法来表示 React.createElement。

JSX 要比 Temple 要灵活一些,更方便在里面加各种逻辑,调用各种函数生成一些 ReactElement,插入到 JSX 中。

Temple 没这么灵活,本质是字符串。你需要用到一些指令去完成一些逻辑,比如 v-if、v-for,但更方便做性能的优化。Vue 进行生产环境打包时,会对 Temple 预编译,实际运行时不会真的对着 Temple 进行运行时编译。

新手友好程度

Vue 比 React 对新手更友好。

首先是文档。文档是开源框架能否流行,一个重要的指标。

在中文文档上我认为 Vue 写得比 React 要好。

当然这也是我的主观的感受,我想可能因为 Vue 的作者是国人的原因,文档的内容更符合国人的习惯,用的短句比较多(我也不太清楚中文翻译是否 Vue 作者进行大量参与)。下面是 Vue 文档的一部分:

这和我们嵌套 HTML 元素的方式类似,Vue 实现了自己的组件模型,使我们可以在每个组件内封装自定义内容与逻辑。Vue 同样也能很好地配合原生 Web Component。如果你想知道 Vue 组件与原生 Web Components 之间的关系,可以阅读此章节

React 的作者则是国外公司,长难句为主,中文一股让人烦躁的翻译腔。比如这个:

React 并没有采用将标记与逻辑分离到不同文件这种人为的分离方式,而是通过将二者共同存放在称之为“组件”的松散耦合单元之中,来实现关注点分离。我们将在后面章节中深入学习组件。如果你还没有适应在 JS 中使用标记语言,这个会议讨论应该可以说服你。

还得怪我英语不太好。当然还有其他的文章质量、章节组织相关的这些,都比较主观。

然后就是 Vue 更接近原生写法

React 引入了很多优秀的东西,但对新手来说是学习成本。比如高阶组件、JSX、

React 技术选型更丰富

如果是 Vue,那 Vue 官方自己已经提供了周边的套件了。CSS 方案直接用 CSS-Scoped,状态库用 Vuex 或 Pina。基本没什么社区的第三方轮子,就算有也是使用量不高。

对 React 团队来说,他们将周边库的开发交给了社区,所以你能收获各种各样不同的轮子,然后在上面纠结半天。CSS 方案,可以用 CSS-Module、styled-components、Radium 等。状态库,你可以用 Redux、Mobx、Zustand、Recoiler、Dva 等。

对老鸟来说,技术选型花点时间还是能选择,但对新手来说,让他们去对比各种轮子,就带来了更多的成本。

在你经历了不少项目后,你会发现 Vue 的技术选型比较稳定,React 的技术选型则是五花八门。

流行程度

React 要比 Vue 流行。

React 是大公司 Facebook(现在改名叫 Meta,还是不太习惯)开源的框架,背后是有团队进行维护的,各个都是大佬。

Vue 更多是个人项目,开始是尤雨溪一个人在维护,后来虽然也有了团队,但其实开发工作大部分都在尤雨溪身上,看下图,第一名和第三名的 commit 数不是一个数量级的(第二名是机器人,忽略不计)

再看看 React 的贡献者 commit 数据:

一个项目的未来是受到项目的灵魂人物的影响的,不少项目因为作者的离开导致缺乏维护,推及大量未处理的 issue。

对于 Vue 来说,它的灵魂人物是尤雨溪。对 React 来说,更去中心化一些,灵魂人物更去中心化一些。

React 的社区方案会更多

这也和 React 更加流行有关,且 React 团队专注于打造 React 本身。

性能

Vue 的性能优于 React。

Vue 的响应式可以做到只更新必要的组件,性能更优

Vue 的底层是响应式,它会劫持状态的读写,进行细粒度的依赖收集。当状态变化时,只有用到它的组件才会更新。

React 则是纯正的单向数据流,数据从父组件流向子组件。当父组件更新时,子组件也会更新,即使这个子组件的状态没有变化。为了跳过这种无必要的渲染,我们需要额外使用 React.memo 做缓存,需要付出不小成本,一不小心还会整成负优化。

React 其实也可以变成响应式,加一个状态管理库,通过发布订阅模式触发组件更新即可,但它不能拯救性能。

Vue 做了编译优化

对于渲染模板方案,Vue 使用了Temple,React 使用了 JSX。

Vue 的 Template 可以做预编译优化。比如一些 DOM 元素是写死的,解析 Template 时,就可以做标记,在第 n 个位置的元素是静态的,就不需要在更新的时候重新构建对应节点,进行 diff 了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div>前端</div> // 这个写死的,更新时不重新渲染这个 
<div v-if="visible">{{ count }}</div>
<div>西瓜哥</div> // 这个也写死

JSX 是完全动态的,我们不知道哪些元素是不变的,只能全部都再生成一遍然后。对于写死的不变元素,对比其实做了无用功。

灵活与规范

Vue 更规范,React 更灵活。

Vue 的单文件组件(.vue 后缀的文件)指的是一个文件里,放入了 temple、script 和 style,来代表一个完整的组件。在这个文件里,你只能声明一个组件,不能声明多个。

但 React 可以在一个文件里声明多个组件。你可以将样式放到另一个文件,然后引入进来。你可以多个组件共用同一份样式文件,你可以在组件内用 renderXx 来嵌套一个有相同上下文的组件。它很灵活,但也是双刃剑,它会让水平不足的同事肆意破坏一切。

React 太灵活,虽然可以天马行空地用你更舒服的方式去实现需求,但它下限低。

Vue 有范式,你要按照标准办事,项目代码不会太过于崩坏,且因为依赖收集按需更新组件,性能优秀,让用 Vue 编写的代码有较高的下限,某种意义上确实适合中小公司。

其他

React 更倾向于函数式编程,提倡 immutable,即数据不可变,每次组件更新时,拿到的状态都是全新的数据。React Hook 就是为了让函数组件成为主流而诞生的。

结尾

React 和 Vue 之间党派之争总是争端不断,我觉得你喜欢哪个就用哪个,然后尊重其他人的选择即可。

我是前端西瓜哥,关注我,学习更多前端知识。


本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端西瓜哥 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
@程序员:Python 3.8正式发布,重要新功能都在这里
【导读】最新版本的Python发布了!今年夏天,Python 3.8发布beta版本,但在2019年10月14日,第一个正式版本已准备就绪。现在,我们都可以开始使用新功能并从最新改进中受益。
AI科技大本营
2019/10/21
2.4K0
@程序员:Python 3.8正式发布,重要新功能都在这里
爬虫(108)Python 3.8的超酷新功能(接近一万字,请耐心享用,而且建议收藏)
在Python中的最新版本发布!自夏季以来,Python 3.8已在beta版本中可用,但在2019年10月14日,第一个正式版本已准备就绪。现在,我们所有人都可以开始使用新功能并从最新改进中受益。
公众号---人生代码
2020/05/18
2.7K0
爬虫(108)Python 3.8的超酷新功能(接近一万字,请耐心享用,而且建议收藏)
海象运算符?一文详解python3.8到底更新了哪些新功能
打开你的电脑 检查你的python版本 早在2019年10月 正式版的python就已经更新到3.8版本 听说还加了一只小海象进去 那么半年过去了 python3.8究竟更新了哪些新功能 我要不要更
刘早起
2020/04/22
4680
海象运算符?一文详解python3.8到底更新了哪些新功能
Python 3.8即将发布,这几个变化你必须知道
【导读】近日, Python 3.8.0b1 版本和 beta 版相继发布, Python 3.8 版的新特征已经基本成型。尽管最终版本的官方发布时间为 10 月,但实际上,用户现在已经可以开始体验新版本的特性了。
AI科技大本营
2019/07/23
6450
Python3.8 新特性-很有用的呀
1、海象表达式****1 2、强制位置参数****2 3、增强型f-string****2 4、continue关键字的使用****3 5、as_integer_ratio()方法****3 6、其他新增语法特性****3 (1)添加 \N{name} 转义符在正则表达式 中的支持: 3 (2) 字典反向迭代 4 (3) 函数关键字参数限制 4 (4) yield和return语法增强 4 (5) 组合数据类型语法警告提示 4 (6) 日期时间对象改进 5 (7) Ctrl-C终止程序的改进 5 (8) 数据拷贝增强型语法 5 (9) pow()函数的改进 5 (10) mod()取模的改进 6 (11) 字典推导式的改进 6 (12) 字典数据执行顺序 6
大牧莫邪
2020/12/31
7150
[译] Python各版本的主要更改
本文总结了Python 3.7到3.12的语法及标准库的主要更改,并且介绍了typing模块的主要更改。此外,还提到了各个版本的EOL(End of Life,Python官方不再提供安全补丁的日期)。
一只大鸽子
2024/03/04
4170
[译] Python各版本的主要更改
python类型检测最终指南--Typing的使用
原文链接:https://realpython.com/python-type-checking/
用户1564362
2019/11/12
5.1K0
python类型检测最终指南--Typing的使用
使用autopep8自动规范化python3代码
编码规范是所有编程语言都有可能面临的问题,严格的按照编码规范来写代码,不仅能够提高代码的可读性,在后续程序的可维护性上面也有较大的帮助。尤其是在开源项目中,一个具备良好编程规范的项目往往能够吸引更多的开发者一起贡献。这里我们介绍2款可以自动帮助我们进行代码格式化规范的工具:autopep8以及black的安装和基本使用方法。
DechinPhy
2021/08/25
1.1K0
Python 3.8.0 正式版发布,新特性初体验
新增一种新语法形式::=,又称为“海象运算符”(为什么叫海象,看看这两个符号像不像颜表情),如果你用过 Go 语言,应该对这个语法非常熟悉。
张凯强
2019/11/19
4670
Python 3.8.0 正式版发布,新特性初体验
Python3.8 特性介绍
Python3.8 已经发布了, 官方文档看这里 What’s New In Python 3.8.
py3study
2020/01/02
5390
使用line_profiler对python代码性能进行评估优化
在做完一个python项目之后,我们经常要考虑对软件的性能进行优化。那么我们需要一个软件优化的思路,首先我们需要明确软件本身代码以及函数的瓶颈,最理想的情况就是有这样一个工具,能够将一个目标函数的代码每一行的性能都评估出来,这样我们可以针对所有代码中性能最差的那一部分,来进行针对性的优化。开源库line_profiler就做了一个这样的工作,开源地址:github.com/rkern/line_profiler。下面让我们一起看下该工具的安装和使用详情。
DechinPhy
2021/05/21
2.6K0
流畅的 Python 第二版(GPT 重译)(四)
Python 中的函数是一等对象。编程语言研究人员将“一等对象”定义为一个程序实体,可以:
ApacheCN_飞龙
2024/03/21
4650
流畅的 Python 第二版(GPT 重译)(四)
用 Python 3.8 中的这个位置技巧让你的 API 变得更好
这是 Python 3.x 首发特性系列文章的第九篇。Python 3.8 于 2019 年首次发布,两年后,它的许多很酷的新特性仍然没有被使用。下面是其中的三个。
用户8639654
2021/09/08
7090
Python 库大全(上)!熟悉的都是大佬!(附代码讲解)
请确保使用 import os 而不是 from os import *。第二种方法会导致 os.open() 覆盖系统自带的 open() 函数,这两个函数的功能有很大的不同。
Python知识大全
2020/02/13
9920
Python3.6、3.7、3.8、3.9新特性
本文列举了Python3.6、3.7、3.8、3.9四个版本的新特性,学习它们有助于提高对Python的了解,跟上最新的潮流。
好派笔记
2021/08/21
5K0
Python3.6、3.7、3.8、3.9新特性
Python 3.8 一周后发布,这几个特性值得关注
海象运算符是 3.8 版本中最引人瞩目的新特性,因其 := 外观而被称为海象运算符(walrus operator)。引入该运算符的是 PEP 572,而也正是由于 PEP 572 被接受过程中的一些不愉快,导致了 Guido van Rossum 因此辞去了 BDFL 的职位。
Python数据科学
2019/10/14
4590
让你的Python运行更快
讨厌Python的人总是说,他们不想使用它的原因之一是它很 慢。嗯,特定程序(无论使用何种编程语言)是快还是慢,在很大程度上取决于编写该程序的开发人员以及编写优化 而 快速的 程序的技能和能力 。
计算机与AI
2020/12/14
5830
Python 3.8 即将到来,这是你需要关注的几大新特性
从事计算机领域工作的读者朋友对 Python 编程语言应该非常熟悉了。这是一门广受好评的动态编程语言,其灵活和语法简易的特点使得这门语言在脚本工具、数据分析、Web 后端都有广泛的应用。Python 开发社区也非常活跃,3.x 的版本迭代速度非常快。2018 年 6 月底,Python 3.7 问世,之后 Python 3.8 的开发和测试工作也已经展开。近日,Python 软件基金会公开了 3.80b2 的说明文档,向公众展示了 beta 版本的测试进展,以及 Python 3.8 版本的新特性和功能改进。
Python数据科学
2019/07/19
3660
Python 3.8 即将到来,这是你需要关注的几大新特性
python 标准库简介
一定要使用 import os 而不是 from os import * 。这将避免内建的 open() 函数被 os.open() 隐式替换掉,它们的使用方式大不相同。
py3study
2020/01/16
6370
Python 3.10 正式发布,新增模式匹配,同事用了直呼真香!
前几天,也就是 10 月 4 日,Python 发布了 3.10.0 版本,什么?3.9 之后居然不是 4.0?(手动狗头)其实龟叔(Guido van Rossum,吉多·范罗苏姆,Python 之父)早在去年 9 月就说了:
K哥爬虫
2021/10/18
7890
Python 3.10 正式发布,新增模式匹配,同事用了直呼真香!
推荐阅读
相关推荐
@程序员:Python 3.8正式发布,重要新功能都在这里
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验