iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > html >Vue和React的比较
  • 769
分享到

Vue和React的比较

2024-04-02 19:04:59 769人浏览 泡泡鱼
摘要

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

这篇文章主要讲解了“VueReact的比较”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“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的比较这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Vue和React的比较

本文链接: https://www.lsjlt.com/news/74157.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Vue和React的比较
    这篇文章主要讲解了“Vue和React的比较”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vue和React的比较”吧!在过去的 5 年中,我一直是一名 R...
    99+
    2024-04-02
  • Svelte 和 React的比较详解(一)
    目录比较 Svelte 和 React 验证从使用者角度开发条件渲染比较 Svelte 和 React 在这篇文章中,我将告诉您我更喜欢 Svelte 还是 React,不...
    99+
    2023-05-18
    Svelte 和 React比较 Svelte  React
  • 2023年最佳JavaScript框架:React、Vue、Angular和Node.js的比较
    文章目录 React:构建用户界面的首选Vue:简单优雅的前端框架Angular:Google支持的全面框架Node.js:服务器端的JavaScript运行环境比较不同框架的优势与劣势Rea...
    99+
    2023-09-26
    javascript react.js vue.js web3 java
  • Javascript框架Vue和React的对比
    本篇内容介绍了“Javascript框架Vue和React的对比 ”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
  • vue和什么框架比较
    Vue 和 React 比较Vue.js 和 React.js 都是当前非常流行的 JavaScript 框架,二者都针对构建 Web 应用程序。下面就让我们对 Vue 和 React 进行详细比较。性能Vue 的性能较好,因为它使用的是 ...
    99+
    2023-05-24
  • vue和react的体积对比分析
    本文小编为大家详细介绍“vue和react的体积对比分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue和react的体积对比分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识...
    99+
    2024-04-02
  • React中的浅比较是怎么工作的
    这篇文章主要介绍了React中的浅比较是怎么工作的的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇React中的浅比较是怎么工作的文章都会有所收获,下面我们一起来看看吧。想要理解浅比较的概念,最直接的方法就是研究...
    99+
    2023-06-30
  • Java和JavaScript的比较(转)
    *Netscape 把 Livescript 改名为 Javascript , 这是Java的一个有趣的变异, 用于客户一方的用户化 *用Java 进行细节编程, 而JavaScript 用于客户接口和系统的全部综合 *JavaScript...
    99+
    2023-06-03
  • 比较node.js和Deno
    目录前言什么是 Deno?与 Node.js 的比较体系结构ES模块依赖管理TypeScript 和其他功能API安全那么,这意味着什么?底线前言 如果你一直关注 Web 开发领域,...
    99+
    2024-04-02
  • python 和 nodejs 比较
    原文连接 包和模块管理 依赖包多版本管理 python 不能直接管理,需要利用 virtualenv来分割不同的环境nodejs NPM 包管理,可以同时依赖不同版本的第三方模块引入模块 python 使用 from / import...
    99+
    2023-01-31
    python nodejs
  • 剖析 Vue 状态管理的精髓:Redux 和 Vuex 比较
    Redux 和 Vuex 都是流行的前端状态管理解决方案,它们都旨在帮助开发者管理应用程序中的状态,使应用程序更加易于维护和扩展。然而,它们在实现方式和适用场景上有所不同。 Redux Redux 是一个独立的状态容器,它与任何前端框架...
    99+
    2024-02-24
    Redux, Vuex, 状态管理, 前端框架, Vue.js
  • PHP PDO 与 mysqli:比较和对比
    PDO PDO 是一个面向对象的数据库访问抽象层,它为 PHP 提供了一个统一的接口,允许您使用相同的代码与不同的数据库(如 MySQL、PostgreSQL、Oracle)进行交互。PDO 隐藏了底层数据库连接的复杂性,简化了数据库操作...
    99+
    2024-02-17
    PHP, PDO, mysqli, 数据库交互
  • 浅谈React中的浅比较是如何工作的
    React 中浅比较的概念无处不在,它在不同的流程中起着关键的作用,也可以在React组件的多个生命周期中找到。比如,React Hooks中的依赖数组,通过React.memo进行...
    99+
    2024-04-02
  • SiteMapPath 与 ASP.NET MVC:比较和对比
    SiteMapPath 和 ASP.NET MVC 是用于管理网站导航和 URL 路由的两种不同的机制。SiteMapPath 是 ASP.NET Web Forms 中的一个功能,而 ASP.NET MVC 是一个更现代化的 MVC(模...
    99+
    2024-04-02
  • Hadoop和spark的性能比较
    本篇内容主要讲解“Hadoop和spark的性能比较”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Hadoop和spark的性能比较”吧!  Hadoop和spark的性能比较  Spark在内...
    99+
    2023-06-02
  • Laravel和CodeIgniter的性能比较
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-16
  • PHP DateTime 扩展的比较器:轻松比较和操作时间值
    比较操作符 PHP 提供了一系列比较操作符,可用于比较 DateTime 对象: 等于 (==):如果两个 DateTime 对象表示相同的时间点,则返回 true。 不等于 (!=):如果两个 DateTime 对象不表示相同的时间点...
    99+
    2024-04-02
  • 怎么比较HashMap和TreeMap
    这期内容当中小编将会给大家带来有关怎么比较HashMap和TreeMap,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1.AbstractMap抽象类和SortedMap接口AbstractMap抽象类:...
    99+
    2023-06-17
  • aws和腾讯云比较
    腾讯云提供了多个产品和解决方案,如Tencent Stack、微信企业号、云盘等,这些产品和方案都具有高性能、高可用性和高安全性等特点。同时,腾讯云还支持自定义规则和配置,可以灵活应对不同场景下的需求。 AWS也提供了多种产品和解决方案,...
    99+
    2023-10-27
    腾讯 aws
  • vue页面比较长如何导航
    这篇文章主要介绍“vue页面比较长如何导航”,在日常操作中,相信很多人在vue页面比较长如何导航问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue页面比较长如何导航”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-07-06
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作