vue与react,angular的区别

Vue.js 作为一个优秀的前端框架,方便前端开发者快速开发应用的前端,在实际项目中使用得比较普遍。

当然 Vue.js 也不是实际项目中唯一的前端框架,比较优秀的前端框架还有 React、AngularJS 和 Angular等。接下来就介绍一下 Vue.js 同这3个框架的对比。

1. Vue.js 同 React 的对比

React 和 Vue.js 有许多相似之处,主要有下几点:

  • 使用虚拟 DOM。
  • 提供了响应式(Reactive)和组件化(Composable)的视图组件。
  • 将注意力集中在核心库,而将其他功能(如路由和全局状态管理)交给相关的库。


Vue.js 同 React 的不同之处有以下几方面。

1) 运行时性能

React 和 Vue.js 的运行速度都是非常快的,所以速度并不是在它们之间做选择的决定性因素,但是在 React 应用中,当某个组件的状态发生变化时,它会以该组件为根,重新渲染整个组件的子树。如果要避免不必要的子组件重新渲染,开发者需要使用 PureComponent 或手动实现 shouldComponentUpdate() 方法,而且需要非常细心。

而在 Vue.js 应用中,组件的依赖是在渲染过程中自动追踪的,所以系统能精确知晓哪个组件确实需要被重新渲染,从而使开发者不再需要考虑此类优化,只需更好地专注于应用本身。

2) HTML & CSS

在 React 中,所有组件的渲染都依靠 JSX(JavaScript XML)完成。使用 JSX 的渲染函数有下面几点优势。

  • 可以使用完整的编程语言 JavaScript 的功能来构建视图页面。例如可以使用临时变量、JS 自带的流程控制,以及直接引用当前 JS 作用域中的值等。
  • 开发工具对 JSX 的支持相比于现有可用的其他 Vue.js 模板还是比较先进的(例如,linting、类型检查、编辑器的自动完成等)。


Vue.js 中默认推荐的是模板(Vue.js 内部也提供了渲染函数,甚至支持JSX)。任何合乎规范的 HTML 都是合法的 Vue.js模板,这也带来了以下几点特有的优势。

  • 对于很多习惯了 HTML 的开发者来讲,模板比 JSX 读写起来更自然。
  • 基于 HTML 的模板使将已有的应用逐步迁移到 Vue.js 更为容易。
  • 使设计师和新人开发者更容易理解和参与到项目中。
  • 可以使用其他模板预处理器(例如 Pug)来书写 Vue.js 的模板。


在 React 中通过 CSS-in-JS 方案实现 CSS 作用域,这引入了一个新的面向组件的样式范例,它和普通的 CSS 的撰写过程是有区别的。

另外,虽然在构建时支持将 CSS 提取到一个单独的样式表,但 bundle 中通常还需要一个运行时程序来让这些样式生效。开发者在能够利用 JavaScript 灵活处理样式的同时,也需要权衡 bundle 的大小和运行时的开销。

Vue.js 样式设置的默认方式是在单文件组件里,用 style 的标签定义。同时还可以使用 style 标签的 scoped 属性,来指定样式的作用域。

3) 规模

从向上扩展的角度来讲,Vue.js 和 React 都提供了强大的路由来应对大型应用。

  • React 社区在状态管理方面非常有创新精神(例如 Flux、Redux),而这些状态管理模式使得甚至 Redux 本身也可以非常容易地被集成在 Vue.js 应用中。
  • 实际上,Vue.js 更进一步地采用了这种模式(Vuex),更加深入集成了 Vue.js 的状态管理解决方案 Vuex,能为开发者带来更好的开发体验。


两者的另一个重要差异是:

  • Vue.js 的路由库和状态管理库都由官方维护且与核心库同步更新。
  • React 则选择把这些问题交给社区维护,因此创建了一个更分散的生态系统;但相对地,React 的生态系统相比 Vue.js 更加繁荣。


最后,Vue.js 提供了 CLI 脚手架,能让开发者通过交互式的脚手架引导非常容易地构建项目。开发者甚至可以使用它快速开发组件的原型。

React 在这方面也提供了 createreact-app,但是现在还存在以下局限性:

  • 它不允许在项目生成时进行任何配置,而 Vue CLI 运行于可升级的运行时依赖之上,该运行时可以通过插件进行扩展。
  • 它只提供了一个构建单页面应用的默认选项,而 Vue.js 提供了各种用途的模板。
  • 它不能用用户自建的预设配置构建项目,而这对企业环境下预先建立约定是特别有用的。


从向下扩展的角度来讲,React 学习曲线陡峭,在开发者开始学 React 前,需要知道 JSX 和 ES2015,因为许多示例用的是这些语法。开发者需要学习构建系统,虽然在技术上可以用 Babel 来实时编译代码,但是这种做法并不推荐用于生产环境。

就像 Vue.js 向上扩展后类似于 React 一样,Vue.js 向下扩展后就类似于 jQuery。开发者只要把如下标签放到页面中就可以运行。

<script src="https://cdn.jsdelivr.net/npm/vue"></script>

然后就可以编写 Vue.js 代码并应用到生产中,只要用 min 版 Vue.js 文件替换掉即可,不用担心其他的性能问题。

由于起步阶段不需学习 JSX、ES2015 及构建系统,所以开发者只需不到一天的时间阅读指南就可以建立简单的应用程序。

4) 原生渲染

React Native 能使开发者用相同的组件模型编写有本地渲染能力的 App(iOS和Android)。能同时跨多平台开发,对开发者来讲是非常棒的。

相应地,Vue.js 和 Weex 会进行官方合作。

Weex 是阿里巴巴发起的跨平台用户界面开发框架,同时也正在 Apache 基金会进行项目孵化,Weex 允许使用 Vue.js 语法开发,不仅可以运行在浏览器端,还能被用于开发 iOS 和 Android 上的原生应用的组件,而且 Weex 还在积极发展,尽管成熟度还不能和 React Native 相抗衡,但是,Weex 的发展是由世界上最大的电子商务企业的需求在驱动,而 Vue.js 团队也会和 Weex 团队积极合作,相信会为开发者带来更好的开发体验。

2. Vue.js 同 AngularJS(Angular 1)的对比

Vue.js 的一些语法和 AngularJS 的语法很相似(例如 v-if VS ng-if),因为 AngularJS 是 Vue.js 早期开发的灵感来源,而 AngularJS 中存在的许多问题在 Vue.js 中已经得到解决。

Vue.js 同 AngularJS 的区别可以体现在如下几方面。

1)复杂性

在 API 与设计两方面上,Vue.js 都比 AngularJS 简单得多,因此开发者可以快速地掌握它的全部特性并投入开发。

2) 灵活性和模块化

Vue.js 是一个更加灵活开放的解决方案。它允许开发者以希望的方式组织应用程序,而不是在任何时候都必须遵循 AngularJS 制定的规则,这让 Vue.js 能适用于各种项目。

由开发者把握决定权是非常必要的。

Vue CLI 旨在成为 Vue.js 生态系统中标准的基础工具。它使多样化的构建工具通过妥善的默认配置无缝协作在一起,这样开发者就可以专注于应用本身,而不会在配置上花费太多时间。

同时,它也提供了根据实际需求调整每个工具配置的灵活性。

3) 数据绑定

AngularJS 使用双向绑定,而 Vue.js 在不同组件间强制使用单向数据流,这使应用中的数据流更加清晰易懂。

4) 指令与组件

在 Vue.js 中指令和组件分得更清晰。指令只封装了 DOM 操作,而组件代表了一个自给自足的独立单元——有自己的视图和数据逻辑。

在 AngularJS 中,每件事都由指令来做,而组件只是一种特殊的指令。

5) 运行时性能

Vue.js 有更好的性能,并且非常容易优化,因为它不使用脏检查。

在 AngularJS 中,当 watcher 越来越多时会变得越来越慢,因为作用域内的每一次变化之后,所有 watcher 都要重新计算,并且,如果一些 watcher 触发了另一个更新,则脏检查循环(Digest Cycle)可能要运行多次。

AngularJS 用户常常要使用深奥的技术,以解决脏检查循环的问题。有时没有简单的办法来优化有大量 watcher 的作用域。

Vue.js 则根本没有这个问题,因为它使用基于依赖追踪的观察系统并且采用异步队列更新的方式,所有的数据变化都是独立触发的,除非它们之间有明确的依赖关系。

3. Vue.js 同 Angular(Angular 2)的对比

Angular 同 AngularJS 的名称虽然差不多,但是它们是两个完全不同的框架。Angular 具有优秀的组件系统,并且很多实现都重写了,API 也完全改变了。

Vue.js 同 Angular 的区别主要体现在以下几方面。

1) TypeScript

Angular 事实上必须用 TypeScript 来开发,因为它的文档和学习资源绝大部分是面向 TypeScript 的。TypeScript 有很多好处——静态类型检查在大规模的应用中非常有用,同时对于拥有 Java 和 C# 背景的开发者也非常容易提升开发效率。

然而,并不是所有人都想用 TypeScript——在中小型项目中,引入 TypeScript 可能并不会带来太多明显的优势。在这种情况下,用 Vue.js 会是更好的选择,因为在不用 TypeScript 的情况下使用 Angular 会很有挑战性。

最后,虽然 Vue.js 和 TypeScript 的整合可能不如 Angular 那么深入,但 Vue.js 也提供了官方的类型声明和组件装饰器,并且已有大量用户在生产环境中使用 Vue.js+TypeScript 的组合。

Vue.js 也和微软的 TypeScript/VSCode 团队进行着积极的合作,其目标是为 Vue.js+TypeScript 用户提供更好的类型检查和 IDE 开发体验。

2) 体积

在体积方面,最近的 Angular 版本在使用了 AOT 和 tree-shaking 技术后最终的代码体积减小了许多,但即使如此,一个包含了 Vuex+Vue Router 的 Vue.js 项目的大小(gzip 之后在大约为 30KB)相比上述优化后的 angular-cli 生成的默认项目的大小(大约为65KB)还是要小得多。

3) 灵活性

Vue.js 相比于 Angular 更加灵活,Vue.js 官方提供了构建工具来协助开发者构建项目,但它并不限制开发者如何组织他们的应用代码。

有人可能喜欢严格的代码组织规范,但也有开发者喜欢更灵活自由的方式。

4) 学习曲线

要学习 Vue.js,开发者只需有良好的 HTML 和 JavaScript 基础。有了这些基本的技能,开发者就可以非常快速地通过阅读指南投入开发。

Angular 的学习曲线是非常陡峭的——作为一个框架,它的 API 比 Vue.js 要大得多,开发者也因此需要理解更多的概念才能开始有效率地工作。

当然,Angular 本身的复杂度是因为它的设计目标就是只针对大型的复杂应用,但不可否认的是,这也使它对于经验不甚丰富的开发者相当不友好。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/111828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据Flink(九十九):SQL 函数的解析顺序和系统内置函数

文章目录 SQL 函数的解析顺序和系统内置函数 一、​​​​​​​SQL 函数

供应IPQ4018原装芯片

长期供应各品牌原装芯片&#xff1a; AG3331 AG3335MNV AG3352 ALT1250BZ-E0 ALT1250TG-D0 ASR1601 ASR1603E ASR1603S ASR1606C ASR1606L ASR1606S ASR1802S ASR1803E ASR1803S ASR1826 ASR3601 BCM47755 BCM47768 BK7231M CB0201 CB0201L CYW43438 CY…

Nginx集群负载均衡配置完整流程

今天&#xff0c;良哥带你来做一个nginx集群的负载均衡配置的完整流程。 一、准备工作 本次搭建的操作系统环境是win11&#xff0c;linux可配置类同。 1&#xff09;首先&#xff0c;下载nginx。 下载地址为&#xff1a;http://nginx.org/en/download.html 良哥下载的是&am…

Vue生命周期钩子

vue生命周期表示在组件创建后的一系列变化&#xff0c;其中钩子函数会在生命周期的关键节点中被调用 为什么在beforeCreated()时&#xff0c;data和methods方法还没有创建&#xff0c;但是在beforeCreated()里面打印this可以看到data相关的数据&#xff1f; 跟浏览器有关&…

k8s-14 存储之volumes

Volumes配置管理 容器中的文件在磁盘上是临时存放的&#xff0c;这给容器中运行的特殊应用程序带来一些问题。首先&#xff0c;当容器崩溃时&#xff0c;kubelet 将重新启动容器&#xff0c;容器中的文件将会丢失因为容器会以干净的状态重建。其次&#xff0c;当在一个 Pod 中…

手机有什么爬虫App工具?

随着智能手机的普及和应用的繁盛&#xff0c;越来越多的人开始对手机App进行数据爬取和分析。那么&#xff0c;在进行手机App爬虫的过程中&#xff0c;我们可以借助哪些工具呢&#xff1f;让我们一起来了解一下吧&#xff01; 1、Fiddler Fiddler是一款功能强大的网络调试工具…

C++11 packaged_task

std::packaged_task 把一个方法打包成一个task扔到线程中执行&#xff0c;然后通过packaged_task中的furture等待执行结果。 void test_promise() {std::packaged_task <int()> task([]()->int {std::cout << "packaged_task begin \n" << std…

公司电脑监控软件|管控企业U盘,防止员工利用U盘泄密

德人合科技——电脑监控软件可以通过U盘管理系统管控企业U盘&#xff0c;防止员工利用U盘泄密。 PC访问地址&#xff1a;https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 其具体功能如下&#xff1a; U盘接入管控&#xff1a;单位内电脑能否使用U…

linux uname详解 -s -r -a 查看内核版本

简介 uname命令用于显示操作系统信息&#xff0c;例如内核版本、主机名、处理器类型等 uname常用的有-a&#xff0c;-r&#xff0c;-rs 参数 --help  显示帮助。-a 或--all 显示全部信息&#xff0c;包括内核名、主机名、内核版本、处理器类型和硬件架构等…

Harbor 安装部署

Harbor基本介绍 1、Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;Harbor 是一个企业级的 Docker 私有仓库项目。 2、Harbor以 Docker 公司开源的 Registry 为基础&#xff0c;提供了图形管理 UI 、基于角色的访问控制(Role Based AccessControl) 、AD/L…

lodash库_.chunk、_.pick、_.omit、_.cloneDeep、_.debounce方法

lodash 模块化、高性能的 JavaScript 实用工具库。官方文档&#xff1a;https://www.lodashjs.com 1.对数组进行分组 _.chunk(array, [size1]) 使用场景&#xff0c;如移动端页面一行能放5个元素&#xff0c;总共7条数据&#xff0c;将一维数组转为二维数组&#xff0c;让一个…

ETX很小

windows桌面调节分辨率即可&#xff1a;

shopee平台现在好做吗

Shopee 是一家知名的电子商务平台&#xff0c;特别在东南亚地区非常流行。是否在 Shopee 平台做生意是否好做取决于多种因素&#xff0c;包括你的产品、市场竞争、营销策略和运营能力等。 以下是一些考虑因素&#xff1a; 1、产品选择&#xff1a;选择畅销的产品或具有市场需求…

Java设计模式之外观模式(Facade Pattern)

外观模式&#xff08;Facade Pattern&#xff09;是一种结构型设计模式&#xff0c;它提供了一个统一的接口&#xff0c;用于访问子系统中的一组接口。外观模式通过隐藏子系统的复杂性&#xff0c;简化了客户端与子系统之间的交互&#xff0c;提供了一个更简单、更直观的接口。…

CBitmap、CreateCompatibleBitmap、CreateBitmap

一、CBitmap类主要是加载位图资源&#xff0c;或者建立一个空白位图用于存储画面。 BOOL LoadBitmap(UINT nIDResource)从工程资源中加载一张位图BOOL LoadOEMBitmap(UINT nIDBitmap)从系统资源中加载一张位图BOOL CreateBitmap(int nWidth, int nHeigjt, UINT nPlane, UINT n…

Linux使用rpm包安装mysql5.7

以前安装过mysql 前言&#xff1a;检查以前是否装有mysql rpm -qa|grep -i mysql安装了会显示&#xff1a;   bt-mysql57-5.7.31-1.el7.x86_64 停止mysql服务和删除之前安装的mysql rpm -e bt-mysql57-5.7.31-1.el7.x86_64查找并删除mysql相关目录 find / -name mysql/va…

2023-10-20 游戏开发-cocos2.0.6-下载地址-记录

官方下载地址: Cocos Creator 下载 - 轻量高效的开发引擎 Tags cocos/cocos-engine GitHub cocos creater 旧版本: Tool/Package/REAMDE.md 木限东/CocosCreatorFAQ - Gitee.com v2.0.6版本: Mac版&#xff1a;http://cocos2d-x.org/filedown/CocosStudioForMac-v2.0.6.dm…

排序算法(python)

排序算法 冒泡排序 一次比较相邻的两个数&#xff0c;每轮之后末尾的数字是确定的。 时间复杂度为 O ( n 2 ) O(n^2) O(n2)&#xff0c;空间复杂度为 O ( 1 ) O(1) O(1)&#xff0c;稳定。 def BUB(nums):for i in range(len(nums)):count 0for j in range(len(nums)-i-1)…

教育课堂小程序,三分钟打造专属小程序 带完整搭建教程

大家好哇&#xff0c;今天来给大家分享一款教育课堂小程序。现如今&#xff0c;线上教育已经普及&#xff0c;在大学课堂里&#xff0c;老师尝尝是使用各种各样的学习APP进行点名&#xff0c;签到&#xff0c;答题&#xff0c;考试等等&#xff0c;相较于传统的APP来说&#xf…

oracle11g安装图解

软件需求 1.安装CentOS6.5的服务器一台 2.Oracle 11g 安装介质: linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip 3.命令行客户端工具xshell、crt或者putty 4.图形界面客户端工具Xming 系统配置检查 1.内存检查 grep MemTotal /proc/m…