我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Vue和React的比较

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Vue和React的比较

这篇文章主要讲解了“Vue和React的比较”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue和React的比较”吧!

在过去的 5 年中,我一直是一名 React 工程师。我爱 React,我爱开发 React 应用。我认为它是现存最好的 UI 框架之一。

然而,React 在这个领域中有一些竞争对手,其中最大的就是 Vue.js。

我曾玩过一阵 Vue.js,但我认为那时的经验已经过时了。因为我将要深入研究 Vue.js 的工作原理以及了解它是如何让我的工作变得更简单。

在深入研究 Vue.js 文档并使用之后(注意:我绝对不是 Vue.js 的专家),我惊奇地发现有些方面 Vue.js 甚至比 React 做得更好。

最后,我希望 React 能受到 Vue.js 的启发并且也开始这么做。

1、不同的理念

Vue.js 和 React 之间的一个主要区别是它们对自己的定位不同。

从它们官网直观来看,React 把自己描述为 “一个用于构建用户界面的 JavaScript 库”,而 Vue.js 则把自己描述为“渐进式 JavaScript 框架”。

React 是一个库,而 Vue.js 是一个框架。我认为从很多方面来说,这是导致这些 UI 框架在执行方式上有所不同的根本原因。

我想强调这一点,以便您在阅读本文时随时牢记这一点。 从历史上看,库和框架都专注于让它们的工作表现得更出色,但框架的要求和提供的能力更全面详尽,而库则更少更轻量。

2、单文件组件

Vue 和 React 都有用来创建 UI 的组件。

组件通常由 3 部分组成:

  •  UI (HTML)

  •  行为 (JavaScript)

  •  外观 (CSS)

Vue.js 的理念是使用单文件组件,用一种开箱即用的方式来编写涵盖所有 3 个部分的组件。

看起来像这样:

<template>    <p>{{ greeting }} World!</p>  </template>  <script>    module.exports = {      data() {        return {          greeting: 'Hello',        };      },    };  </script>  <style scoped>    p {      font-size: 2em;      text-align: center;    }  </style>

即便你不是一个 Vue.js 的工程师也可以理解这里的代码。

React 组件提供了开箱即用的 UI 和 行为部分,但是样式在很大程度上不受限制:

import React, { useState } from 'react';  function Button() {    const [count, setCount] = useState(0);    return (      <button onClick={() => setCount(count + 1)}>        Current count: {count}        <br />        Click me      </button>    );  }

当然了,React 有一个非常活跃的社区,所以如果你想包含样式,可以轻松使用 Emotion 或 Styled Components 来填补样式的空缺,但是:

  •  它们是非内置的;

  •  你必须知道这些库才能使用他们。

这正好与默认提供了这些的 Vue.js 相反。

3、官方支持的相关库

任何足够大且复杂的 UI 应用都需要两个附加功能的支持:

  •  路由

  •  状态管理

Vue.js 官方支持的库分别覆盖了这两个场景: Vue Router 和 Vuex 。

这些库明确地在 Vue.js 文档中提及,并且由 Vue.js 核心组开发和维护。这太神奇了。

它为刚使用 Vue.js 的工程师提供了解决问题的明确方法,并让他们相信这些库是长期维护的。

拥有第一方支持的库并不会限制社区解决方案,但确实为新用户提供了入门解决方案

4、风格指南

嗯,我非常希望 React 也有风格指南,在阅读本节之前,请单击链接并浏览Vue.js的样式指南。

它回答了很多 Vue.js 新手可能遇到的问题,并提供了如何编写 “适当的” 和易于访问的 Vue.js 的最佳实战。

它分享了经过实战检验的以及社区中的最佳实践和模式。

最重要的是:它是由 Vue.js 官方维护和支持的!这太棒了!

5、类和样式绑定

如上所述,Vue.js 内置了对样式的支持。此外,Vue.js 本质上是内置 classNames 的。

Classnmes 是一个很棒的库,可以方便地连接和动态构造应用于 HTML 元素的 CSS 类名。

而在 React 中,你需要知道这个库,然后安装它。

在 Vue.js 中,这只是另一个内置特性:参考文档:

Vue.js 模板:

<div    class="static"    :class="{ active: isActive, 'text-danger': hasError }"  ></div>

data 内容:

data() {    return {      isActive: true,      hasError: false    }  }

渲染出的 UI:

<div class="static active"></div>

有这个内置项真好。

Vue.js 进一步支持内联样式。Vue.js 和 React 一样,都支持内联样式,但是 Vue.js 比 React 更棒的地方就是它能够自动为需要的 CSS 加上前缀。

参考文档:

当使用 :style 时,需要添加浏览器引擎前缀的 CSS 属性,拿 transform 举例,Vue.js 会自动侦测并添加相应的前缀。

真正显示框架控制自己的模板语法的优势。

6、插槽

React 中一切都是 prop。

如果要在 React 组件中渲染多个子节点,只需添加多个 prop:

function Nav({ left, right }) {    return (      <nav>        <div className="left">{left}</div>        <div className="right">{right}</div>      </nav>    );  }  function App() {    return (      <main>        <Nav left={<Logo />} right={<UserDropdown />} />      </main>    );  }

但如果内部内容边庞大之后,虽然能很好运行,但有一点尴尬。

Vue.js 采用了插槽的方法,我认为它的 API 更简洁。

<!-- A Vue.js component template named "base-layout" -->  <div class="container">    <header>      <slot name="header"></slot>    </header>    <main>      <slot></slot>    </main>    <footer>      <slot name="footer"></slot>    </footer>  </div> <!-- When "base-layout" is used -->  <base-layout>    <template v-slot:header>      <h2>Here might be a page title</h2>    </template>   <template v-slot:default>      <p>A paragraph for the main content.</p>      <p>And another one.</p>    </template>    <template v-slot:footer>      <p>Here's some contact info</p>    </template>  </base-layout>

Vue.js 使用插槽(受Web Component 规则草案的启发)清楚地指明内容在组件内部的位置。

Vue.js 为反复执行的任务提供了捷径。在这种情况下,可以使用插槽来简化上面的示例:

<base-layout>    <template #header>      <h2>Here might be a page title</h2>    </template>    <template #default>      <p>A paragraph for the main content.</p>      <p>And another one.</p>    </template>    <template #footer>      <p>Here's some contact info</p>    </template>  </base-layout>

7、指令修饰符

我认为 Vue.js 指令修饰符的功能真的很酷。

在讨论指令修饰符之前,让我快速介绍一下指令是什么。

指令 v- 是你在 Vue.js 模板中使用的“带有前缀的特殊属性”。

指令的作用是在表达式的值发生变化时以响应地方式将副作用施加到 DOM

例如:

// If "seen" variable is false then this p tag is not rendered  <p v-if="seen">Now you see me</p>

针对事件地指令:

<!-- full syntax -->  <a v-on:click="doSomething"> ... </a>  <!-- shorthand -->  <a @click="doSomething"> ... </a>

还有其他更多的指令。

指令还支持修饰符。

使用通用指令执行通用操作很开发友好。

对于事件处理指令(v-on),有很多修饰符:

<!-- the click event's propagation will be stopped -->  <a @click.stop="doThis"></a>  <!-- the submit event will no longer reload the page -->  <form @submit.prevent="onSubmit"></form>  <!-- modifiers can be chained -->  <a @click.stop.prevent="doThat"></a>  <!-- just the modifier --> <form @submit.prevent></form>  ...and more!

如果你想在 React 中执行这样的操作,可以创建一个辅助函数或一个自定义组件。但与指令修饰符地方式相比并不简洁。

我很好奇是否有人可以开发一个 Babel JSX 超集,然后就可以编写如下代码了:

<form onSubmit.prevent={onSubmit} />

它将转换为:

React.createElement(form, { onSubmit: preventWrapper(onSubmit) });

这不在 React 的讨论范围内,但我仍然认为这会是一次生产效率地大提升。

还有更多的 Vue.js 修饰符。比如按键修饰符:

<!-- only call `submit()` when the `key` is `Enter` -->  <input @keyup.enter="submit" />  <input @keyup.page-down="onPageDown" />

太酷了。

8、表单输入绑定

当将数据绑定到输入元素时,v-model 指令会有非常有趣的特性。

从文档中发现,v-model 内部使用了不同的属性,并为不同的输入元素发出不同的事件:

  •  text 和 textarea 元素使用 value 属性和 input 事件;

  •  复选框和单选按钮使用 checked 属性和 change 事件;

  •  select 使用 value 用作属性和 change事件。

这样做的好处是,您无需关心数据是如何同步的,您只需关心它是如何为你服务的。

让我们比较一下 React 和 Vue.js 是如何进行绑定:

// Input  ////////  // React  <input type="input" value={message} onChange={onChange} />  // Vue.js  <input type="input" v-model="message" />  // Checkboxes and Radiobuttons  ////////  // React  <input type="checkbox" checked={message != null} onChange={onChange} />  // Vue.js  <input type="checkbox" v-model="message" />  // Select ////////  // React  <select value={message} onChange={onChange}>      <option>A</option>  </select>  // Vue.js  <select v-model="message">      <option>A</option>  </select>

发现其中的不同了吗?

现在,我要为 React 辩护了,React 鼓励(并要求)您学习学习数据实际是如何设置以及它是如何变化的。这意味着,如果您曾经用普通 JS 写过一个表单,您将更了解其运行原理。 与 Vue.js 不同,后者帮您把这些特性都抽象出来了。

9、自定义指令

像任何好的框架一样,您可以在 Vue.js 中创建自己的自定义指令。

Vue.js 确实关注“代码重用和抽象的主要形式是组件”,但这里有一个使用自定义指令不错的例子,通过v-focus在 mount 时自动聚焦到元素上:

const app = Vue.createApp({})  // Register a global custom directive called `v-focus`  app.directive('focus', {    // When the bound element is mounted into the DOM...    mounted(el) {      // Focus the element      el.focus()    }  })  <input v-focus />

在 React 中,你可能会编写一个自定义组件来完成相同的事情,但对于这种简单任务而言有些重

10、用 TypeScript 编写

最后,Vue.js 最近正在用 TypeScript 重写。

这意味着它们对 TypeScript 支持都是一流的,因为框架本身是就是用 TypeScript 编写的。

其实 React 用什么编写并不重要,我也不认为它有什么太大的区别,但看到 Vue.js 也用 TypeScript 编写仍然是一件很不错事。

感谢各位的阅读,以上就是“Vue和React的比较”的内容了,经过本文的学习后,相信大家对Vue和React的比较这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Vue和React的比较

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Svelte 和 React的比较详解(一)

在这篇文章中,我将Svelte 还是 React作了对比,不能以个人意见代表谁好谁坏。以及我发现使用这两个框架的一些区别,感兴趣的小伙伴可以参考阅读
2023-05-18

vue和什么框架比较

Vue 和 React 比较Vue.js 和 React.js 都是当前非常流行的 JavaScript 框架,二者都针对构建 Web 应用程序。下面就让我们对 Vue 和 React 进行详细比较。1. 性能Vue 的性能较好,因为它使用的是 Virtual DOM,这使得渲染性能更高。而 React 使用的也是 Virtual DOM,但是虚拟 DOM 的实现方法不同,即
2023-05-24

React中的浅比较是怎么工作的

这篇文章主要介绍了React中的浅比较是怎么工作的的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React中的浅比较是怎么工作的文章都会有所收获,下面我们一起来看看吧。想要理解浅比较的概念,最直接的方法就是研究
2023-06-30

WEP和WAP的比较

  不知大家对WEP、WAP等这些名词有没有一些熟悉感?可能大家都会都遇到过吧,就是你在设置WiFi密码的时候选择安全类型的时候,这样讲是不是有印象了呢?今天就是来给大家比较一下WEP和WAP的。  一、WEP  WEP(Wired Equivalent Privacy,有线等效加密),又称无线加密协议(Wireles
WEP和WAP的比较
2024-04-17

python 和 nodejs 比较

原文连接包和模块管理依赖包多版本管理 python 不能直接管理,需要利用 virtualenv来分割不同的环境nodejs NPM 包管理,可以同时依赖不同版本的第三方模块引入模块 python 使用 from / import,不同模块
2023-01-31

Java和JavaScript的比较(转)

*Netscape 把 Livescript 改名为 Javascript , 这是Java的一个有趣的变异, 用于客户一方的用户化 *用Java 进行细节编程, 而JavaScript 用于客户接口和系统的全部综合 *JavaScript
2023-06-03

剖析 Vue 状态管理的精髓:Redux 和 Vuex 比较

Redux 和 Vuex 都是状态管理方案,但它们在实现方式和适用场景上有所不同。Redux 是一个独立的状态容器,而 Vuex 是一个与 Vue.js 框架紧密集成的状态管理解决方案。
剖析 Vue 状态管理的精髓:Redux 和 Vuex 比较
2024-02-24

PHP PDO 与 mysqli:比较和对比

PHP 中用于数据库交互的 PDO(PHP Data Objects)和 mysqli 都是广泛使用的扩展。本文将对这两个扩展进行比较和对比,帮助您选择最适合您项目的扩展。
PHP PDO 与 mysqli:比较和对比
2024-02-17

Hadoop和spark的性能比较

本篇内容主要讲解“Hadoop和spark的性能比较”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hadoop和spark的性能比较”吧!  Hadoop和spark的性能比较  Spark在内
2023-06-02

Laravel和CodeIgniter的性能比较

基准测试和实战案例表明,codeigniter 在性能方面优于 laravel。基准测试显示 codeigniter 在数据库查询、路由、模型保存和视图解析方面表现更佳。在实战电子商务应用程序的负载测试中,codeigniter 也展现出更
Laravel和CodeIgniter的性能比较
2024-05-16

aws和腾讯云比较

腾讯云提供了多个产品和解决方案,如TencentStack、微信企业号、云盘等,这些产品和方案都具有高性能、高可用性和高安全性等特点。同时,腾讯云还支持自定义规则和配置,可以灵活应对不同场景下的需求。AWS也提供了多种产品和解决方案,如AWSEC2、AWSDynamoDB等,这些产品和方案具有高可用性、弹性伸缩、安全性高等特点,同时还支持多种负载均衡和容错技术,可以有效提高系统的稳定性和可用性。在防护方面,AWS...
2023-10-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录