当前位置: 首页 > Web前端 > vue.js

Vue和React框架的区别和优势

时间:2023-03-31 19:52:08 vue.js

Vue和React是目前比较流行的两个JavaScript框架。它们之间有什么区别,各自的优缺点是什么?本文将为您介绍。我写过两个几乎一模一样的web应用,一个基于Vue,一个基于React,方便大家阅读本文时查找相关代码。ReactsampleappVuesampleapp简介除非你最近没有关注前端开发,否则你一定听说过Facebook创建的JavaScriptUI框架React。它支持大多数Facebook网站,包括Instagram。React不同于当时流行的jQuery、Backbone.js和Angular1框架,它的诞生改变了JavaScript的世界。最大的变化之一是React推广了VirtualDOM(我们稍后会探讨)并创建了一种新的语法——JSX,它允许开发人员用JavaScript编写HTML(译者注:HTMLinJavaScript)。WAT?Vue致力于解决与React相同的问题,但它提供了另一套解决方案。Vue使用模板系统而不是JSX,可以更轻松地升级现有应用程序。这是因为模板使用普通的HTML。通过Vue集成现有系统相对容易,不需要整体重构。同时Vue声称它更容易学习,我最近刚接触Vue并且可以证明这一点。关于Vue需要说的是,Vue主要由单个开发人员维护,而不是像React那样由Facebook这样的大公司维护。相似之处React和Vue之间有很多相似之处。例如,它们都是专注于创建富前端应用程序的JavaScriptUI框架。与“功能齐全”的早期JavaScript框架不同,Reat和Vue只有框架的骨架,路由、状态管理等其他功能都是框架的独立组件。VirtualDOM啊哈,人们常说什么是VirtualDOM?Vue.js(2.0版)和React之间最大的相似之处之一是它们都使用称为“虚拟DOM”的东西。所谓VirtualDOM,基本上就是它的名字的意思:虚拟DOM,DOM树的虚拟表示。它的诞生基于这样一个概念,即改变实际的DOM状态比改变JavaScript对象要昂贵得多。虚拟DOM是映射真实DOM的JavaScript对象。如果你需要改变任何元素的状态,你必须先在虚拟DOM上改变它,而不是直接改变真实的DOM。当发生变化时,会创建一个新的虚拟DOM对象,并计算新旧虚拟DOM之间的差异。然后将这些差异应用于真实的DOM。例子如下,我们可以看到下面列表的代码是如何用HTML写的:

  • item1
  • item2
  • 在JavaScript中,我们可以使用objects:{type:'ul',props:{'class':'list'},children:[{type:'li',props:{},children:['item1']},{type:'li',props:{},children:['item2']}]}真实的VirtualDOM会比上面的例子复杂一些,但是本质上具有嵌套数组的本机对象。当一个新项目被添加到这个JavaScript对象时,一个函数会计算新旧虚拟DOM之间的差异,并将其反映在真实的DOM上。计算差异的算法是高性能框架的秘诀,React和Vue的实现略有不同。Vue声称它可以更快地计算出VirtualDOM的差异,因为它会在渲染过程中跟踪每个组件的依赖关系,而无需重新渲染整个组件树。对于React,每次应用程序的状态发生变化时,所有的子组件都会被重新渲染。当然,这可以通过shouldComponentUpdate生命周期方法来控制,但Vue将此视为默认优化。总结:如果您的应用程序具有复杂的交互并且需要处理大量的UI更改,那么使用VirtualDOM是个好主意。如果不经常更新元素,那么VirtualDOM不一定适用,性能可能不如直接操作DOM。组件化React和Vue都鼓励组件化应用程序。从本质上讲,建议您将应用程序拆分为功能明确的模块,并且每个模块之间可以以合适的方式进行通信。组件化的示例可以在本文中间找到:您可以将组件视为用户界面的小块。如果我要设计Facebook的UI,聊天窗口将是一个组件,评论将是另一个组件,而不断更新的好友列表将是一个组件。在Vue中,如果你遵循一定的规则,你可以使用单文件组件。//PastaItem.vue正如你在上面的例子中看到的,HTML、JavaScript和CSS都写在一个文件中。您不再需要在.vue组件文件中导入CSS,尽管这也是可能的。React也很相似,JavaScript和JSX写在同一个组件文件中。importReactfrom"react";classPastaItemextendsReact.Component{render(){const{details,index}=this.props;返回(}/>

    {details.name}

    {details.desc}

    this.props.addToOrder(index)}className="btnbtn-primary">加入订单{this.props.orders||0}
    );}}exportdefaultPastaItem;Props在上面两个在示例中,我们可以看到React和Vue都有props的概念,它是属性的简写。Props是组件中的一个特殊属性,它允许父组件向子组件传递数据。Object.keys(this.state.pastadishes).map(key=>)在上面的JSX库组中,index、key、details、orders、addToOrder都是props,数据会下载到子组件PastaItem中。这在React中是必需的,它的“状态”依赖于“单一事实来源”(稍后会详细介绍)。在Vue中,道具略有不同。它们也是在组件中定义的,但是Vue依赖于模板语法,你可以通过模板的循环功能更高效地展示传入的数据。这是实现template,但是这段代码可以完美运行,但是在React中显示相同的数据有点麻烦。构建工具React和Vue都有自己的构建工具,您可以使用它们快速设置开发环境。React可以使用CreateReactApp(CRA),而Vue对应的是vue-cli。这两种工具都允许您根据最佳实践设置项目模板。由于CRA有很多选项,使用起来可能有点麻烦。这个工具会强制你使用Webpack和Babel。另一方面,vue-cli有一个模板列表可供选择,可以按需创建不同的模板,使用起来更加灵活。其实这两个工具都非常好用,都可以给你搭建一个很好的环境。如果你可以不配置Webpack,Jeff和我认为这是一件很棒的事情。Chrome开发工具React和Vue都有很棒的Chrome扩展来帮助你发现错误。他们检查您的应用程序并让您查看Vue或React中的更改。您还可以在应用程序中查看状态并实时查看更新。React的开发者工具:https://cdn.deliciousbrains.c...Vue的开发者工具:https://cdn.deliciousbrains.c...Companion框架Vue最后和React类似,但略有不同的是它们是Companion框架处理方法。相同的是,这两个框架都专注于UI层,路由和状态管理等其他功能由配套框架处理。不同之处在于它们与各自的配套框架的关系。Vue的核心团队维护着vue-router和vuex,它们都作为官方推荐存在。React的react-router和react-redux是由社区成员维护的,并不是官方维护的。主要区别Vue和React有很多相似之处,但也有完全不一致的地方。TemplatesvsJSXReact和Vue最大的区别就是模板的写法。Vue鼓励您编写近似于常规HTML的模板。它的编写非常接近标准HTML元素,但具有更多属性。
    • {{item.msg}}
    这些属性也可以用在单文件组件中,尽管它需要在构建时将组件转换为有效的JavaScript和HTML。
    Vue鼓励大家使用HTML模板进行渲染,使用类似Angular风格的方式输出动态内容。因此,Vue可以通过将原有模板集成到新的Vue模板中,轻松地为旧应用程序提供升级。它还使新手很容易适应它的语法。另一方面,React建议所有模板都用JSX编写,这是一种常见的JavaScript语法扩展。同样的代码,用JSX编写,如下所示:}details={this.state.pastadishes[key]}addToOrder={this.addToOrder}orders={this.state.orders[key]}/>)}React/JSX乍一看非常冗长,但是使用JavaScript而不是模板来开发,给了开发者很多编程能力。但请记住:能力越大,责任越大。BenParkerJSX只是混合了XML语法的JavaScript,但是一旦掌握了它,使用起来就会很愉快。这可能只是我个人的看法,但我认为它比Angular1的样式属性要好得多,而且Angular1真的无法忍受。相反的论点是Vue的模板语法消除了向视图/组件添加逻辑的诱惑,保持了关注点的分离。值得一提的是,与React一样,Vue在技术上支持渲染函数和JSX,但它不是默认的。状态管理与对象属性如果您熟悉React,就会知道应用程序中的状态是一个关键(React)概念。还有一些配套框架旨在管理大型状态对象,例如Redux。此外,React应用程序中的状态对象是不可变的,这意味着它不能直接更改(这不一定是真的)。在React中,您需要使用setState()方法来更新状态。addToOrder(key){//复制this.stateconstorders={...this.state.orders};//更新或添加orders[key]=orders[key]+1||1;这。setState({订单});在Vue中,state对象不是必须的,数据在Vue对象中通过data属性进行管理。exportdefault{name:'app',data(){return{samplePasta:samplePasta,orders:{}}},...方法:{handleOrder:function(key){if(!this.orders.hasOwnProperty(key)){this.$set(this.orders,key,{count:0});}this.orders[key].count+=1;在Vue中,不需要使用诸如setState()类的方法来改变它的状态。在Vue对象中,data参数是应用程序中数据的保存器。关于在大型应用中管理状态的话题,Vue.js的作者尤玉玺曾说过,(Vue的)解决方案适用于小型应用,但不适用于大型应用。在大多数情况下,框架内置的状态管理不足以支持大规模应用,必须使用Redux或Vuex等状态管理解决方案。考虑到这一点,争论如何在您的应用程序中管理状态可能是不成熟的优化,并且它可能只是个人偏好的问题。此外,您可能真的不需要担心这方面的问题。ReactNative与?ReactNative能够在移动设备上创建原生应用程序,而React处于领先地位。使用JavaScript、CSS和HTML创建本机移动应用程序是一项重要的创新。Vue社区和阿里合作开发了Vue版本的ReactNative——Weex也很不错,但是还在开发中,还没有经过实际项目的验证。那么,谁赢得了这场比赛?TLDR;JavaScript已死,一起用TypeScript如果你想在职场上拥有闪耀的JavaScriptUI框架体验,React和Vue都是不错的选择。React似乎更受欢迎,但Vue也越来越广为人知。如果你想将现有应用程序升级到新的JavaScript框架,那么我建议你选择Vue。事实上,当您想要创建现代JavaScript应用程序时,两者都是不错的选择,具体取决于您的喜好。