React、Vue浅析

部署运行你感兴趣的模型镜像

 关注前端的同学都了解,React和Vue是目前应用很广泛的两个前端框架。React是由Facebook开发的,Vue起初则是由google一名程序员尤雨溪开发的。截止到目前github上显示,React的Star数为87422,Vue的为78523,数据差距越来越小。两个框架国内外使用概况如图1所示:


          图1 国外前端框架使用概况

 上图显示,世界范围内来看,React依然比Vue要受欢迎。实际的项目中,开发者更倾向于选择React框架。毕竟React背后是Facebook团队支持,更新维护迭代更快,许多衍生组件比较完善,开发中遇到问题更容易找到已有的解决方案。React最大的特点是虚拟DOM,可以更优实现DOM更新,提升项目性能,更适合应用于大型项目的开发。因此,很多公司选择React框架。据我所知,一开始百度和大众点评的前端中React框架的使用比较广泛。现在,据我所知国内一些使用React框架的前端项目也开始向用Vue重构,或者新启的项目中引入Vue框架。据了解美团,滴滴等公司目前主流框架为Vue。图2是国内前端框架的使用情况:


图2 国内前端框架使用概况

     由上图可见,国内React和Vue的比例基本持平。尤其是自Vue2.0引入了虚拟DOM之后,有效优化了前端性能。而且Vue框架本身对开发者比较友好,更容易上手开发。关于React和Vue框架哪个更好的争议很大,在我看来框架没有真的所谓的更好。而是相对于个人的开发习惯或者项目需要,哪一个更适合。下面将从六个方面来比较两个框架的异同。

1.Virtual DOM

 React和Vue最大的相似之处就是Virtual DOM。作为前端开发者我们应该深有体会,项目中使用JQuery库,我们需要频繁地对DOM节点进行操作。大量的节点处理,十分耗费性能。如果我们把DOM结构抽象为js对象,通过对比修改前后js对象的变化,之后再映射到真实DOM上,是不是可以很大程度上优化前端的性能?Virtual DOM就是运用的这个思想,当元素状态发生变化时,生成一个新的Virtual DOM对象,然后计算新旧Virtual DOM对象之间的差异,更新到真实的DOM上。

 在计算新旧DOM对象的差异时,首先深度优先遍历新旧DOM树存储为两个对象,其次使用Diff算法,比较两个对象的异同,包括层级的比较,组件的比较及节点的比较,将结果存储到patch数组中。最后深度优先遍历真实DOM结构,将patch数组中存储的异同更新到真实DOM结构中。更新时,包括节点的增删及位置调换。

 虚拟DOM也有一定的局限性,如果DOM变化很少,采用上述方法来比较麻烦,不如之前直接对节点进行操作。但针对整个项目来说,通常会有大量的DOM变化,还是引用虚拟DOM比较好。其实,之前也有对大量DOM变化处理的方法documentFrament,它需要我们手动去处理,而框架中引入Virtual DOM可以自动化处理。其中两个框架中Virtual DOM也有细微差别。React会因为父组件中数据的变化,引起所有子组件的render,除非手动加入shouldComponetUpdate来判断是否需要更新。而Vue则不用手动设置,只会更变化的组件。


2.组件化

 组件化也是React框架的一大特色,Vue框架出现于React框架之后,其设计也引入了组件化。我们在项目开发过程中,首先分析可以分成一个模块module,其次每个模块又要拆分出多少组件,有哪些可以提取出作为公共组件。组件化使我们的项目结构更加清晰,同时更容易定位问题及维护。React中创建组件的语法如下:

date.jsx:

import React from‘react’;

export defaultReact.createClass({

render() {

return (

<div>date</div>

)

}

})

index.js:

import React from‘react’;

import Date from‘date.jsx’;

export defaultReact.createClass({

render() {

return (

<Date/>

)

}

})

     上述代码可知组件的创建及使用方法,React中所有的组件渲染使用的是JSX,JS和HTML可以混合在一起编写代码。组件化之后便涉及到组件间的数据交流。React是单向数据流,父子组件可以通过this.props及自定义事件来实现组件间的通信。非父子组件间的通信,我们可以使用ref参数设置或自定义事件来实现。

     Vue也有组件化的特点,它支持JSX来渲染组件,但自带的模板格式是其一大优点。只有模板中的HTML是有效的,高效分离DOM结构和页面逻辑代码。模板格式如下所示:

<template>

<div></div>

</template>

var data = {“a”:1}

new Vue({

data:data

})

     Vue中父子组件间的通信也可以通过Prop和自定义事件来实现,非父子组件间的通信可以借助于订阅/发布模式来实现。


3.状态管理

 大型复杂的项目数据量比较大,组件间的交互通信比较频繁。因此,项目中我们通常借助一些插件来统一对数据进行状态管理。React中我们都引入Redux来统一管理数据,首先是用户操作触发action方法,对应reducer中的类型,生成新的state对象,然后更新store中存储的对象。返回新的state对象,映射到view视图中。Redux的开发应用结构如图3所示:


图3 Redux开发应用结构

 类似于React 中使用Redux,一般我们使用Vuex来进行状态管理。Vuex的开发应用结构如下官网借用的图4所示,Vuex的核心概念如下:

1)State:Vuex 使用单一状态树,用一个对象包含全部的应用层级状态,作为一个唯一数据源而存在。也既是说,每个应用将仅仅包含一个 store 实例。

2)Getters:用于从state中获取状态值。

3)Mutation:用于 更改 Vuex 的 store 中的状态的唯一方法。每个 mutation 都有一个字符串的 事件类型 (type)和一个回调函数 (handler),它类似于Redux中的Reducer。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数。

4)Action:它提交的是 mutation,而不是直接变更状态;Action 可以包含任意异步操作。


图4 Vuex开发应用结构


4.路由

 针对单页应用项目的开发,React和Vue都提供了各自的路由插件react-router、vue-router。他们都是利用组件化的思想来实现的,原理比较相似,只是使用时代码编写有些不同。React是组件的形式,Vue是JS对象的形式。

React中app.jsx部分伪代码:

import React from'react';

import ReactDOM from'react-dom';

import { Router, Route,hashHistory, IndexRoute, Redirect } from 'react-router';

ReactDOM.render((  

<Router history={hashHistory}>    

<Route path="/" component={主页面组件名}>      

<Route path="sec" component={某一页面的组件名}>        

<IndexRoutecomponent={ShowIndex}></IndexRoute>       <Route path="/shows/:id"onEnter={handleEnter} onLeave={handleLeave} component={Shows} />         <Redirectfrom="shows/:id" to="/shows/:id" />       </Route>    

</Route>  

</Router> ), app);

 

Vue中app.js的部分路由配置伪代码:

import Vue from'./libs/vue.js';

import VueRouter from'./libs/vue-router.js'; Vue.use(VueRouter); router.map({  

'/':{    

component:index,    

subRoutes:{      

'/':{        

component:main 主页面组件     

},      

   '/my':{        

name:'my',        

component:my 某一页面组件     

},     

 '/results/:key':{        

name:'results',        

component:results某一页面组件   

 }    

}  

}

}); 


5.脚手架

 两个框架都有自己的脚手架,我们无需自己去搭建项目框架,可以直接在github上git clone到本地直接使用。React的脚手架为create-react-app,目前有4万多人star。Vue的脚手架为vue-cli,目前star只有8千多。两个官方脚手架都使用npm/yarn来管理包依赖,webpack为构建工具。


6.React Native与Weex

 React Native和Weex分别是React和Vue框架衍生出可以跨平台,使用同一接口开发web、安卓、IOS的应用。实现了一次编写,多端运行。两者都封装了一些组件,开发时可以直接使用,组件在多端通用,只有极少的组件在安卓和IOS段有差异。相对来说React Native的应用比较广泛,很多公司都成立了专门研究其应用的小组,甚至有些重构开发的app已经上线。据我所知,斗鱼直播就有专门使用React Native开发的应用,但是下载量比较小。Weex是由阿里巴巴的技术人员引入尤雨溪的前端Vue开发的,目前应用范围较小,主要是阿里的产品在使用该技术。就个人经验来说,有一定的前端基础及对两个框架的开发使用基础,在学习React Native和Weex开发多端使用的应用比较容易。否则,没有任何开发基础还是相对来说很困难的。

     以上便是我对两个框架的浅显的理解,参考了网上的很多资源。就我个人而言,两个框架我都使用过。在点评实习的时候,使用的是React框架,在滴滴出行实习的时候使用的是Vue框架。对于初学者来说React上手开发相对Vue来说要难一些,只有清楚地理解React原理才能去开发。而Vue则不同,在官网学习一些api语法,便可以尝试上手开发。看的越多越发现自己的无知,需要深入学习的知识还有很多。


参考资料

https://zhuanlan.zhihu.com/p/20346379?refer=purerender

https://segmentfault.com/a/1190000004913592

https://www.cnblogs.com/lvyongbo/p/5938153.html

https://www.jianshu.com/p/8b94f1b98578

https://www.cnblogs.com/axl234/p/5729072.html

https://vuex.vuejs.org/en/intro.html



您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

<think>首先,用户的问题是基于系统指令提供的引用内容,询问关于Vue.js和React的相关信息。引用包括:[1] 提到VueReact的对比、虚拟DOM更新策略等;[2] 提到前端框架发展史和Vue.js的入门。 系统级指令要求: - 所有行内数学表达式用$...$格式(但这里没有数学内容,所以可能不需要)。 - 独立公式用$$...$$并单独成段(同样,可能不适用)。 - LaTeX语法正确(确保任何数学部分正确,但这里没有)。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层要求: - 回答结构清晰,帮助用户逐步解决问题。 - 保证回答真实可靠。 用户的问题是:“我想获取关于Vue.js和React的相关信息 请问Vue.js和React的相关信息”。我需要基于提供的引用内容来回答。 引用内容回顾: - [^1]: 讨论VueReact的对比,虚拟DOM更新策略:React全量diff,Vue局部订阅;两者都解决同层diff,不解决跨层diff;参考链接:[浅析reactvue中的diff策略](https://zhuanlan.zhihu.com/p/20346379)。 - [^2]: 前端框架发展史:12年HTML CSS + div,13年jQuery,14年MVC Angular1.0 React,15年Vue 微信小程序;Vue.js第一次使用;什么是框架和库。 我需要结构化回答: 1. **介绍Vue.js和React**:基于引用,简要描述它们是什么和位置在前端历史中。 2. **对比Vue.js和React**:重点在虚拟DOM更新策略,如引用[^1]中提到。 3. **其他相关信息**:我从可靠知识补充,确保真实可靠。例如,我可以添加核心概念、流行度、生态系统等,但基于引用。 4. **生成相关问题**:在回答末尾添加相关问题列表。 回答结构: - 开头:直接回应用户问题,介绍主题。 - 主体:逐步解释。 - 先介绍Vue.js和React是什么。 - 然后对比它们,特别是虚拟DOM策略。 - 提及发展史。 - 末尾:添加相关问题。 确保使用中文。 添加引用标识:在回答中,当引用特定段落时,在末尾添加[^1]或[^2]。 例如: - 如果提到虚拟DOM更新策略,添加[^1]。 - 如果提到历史,添加[^2]。 生成相关问题: - 基于主题,如Vue.js和React的优缺点、学习资源、常见问题等。 相关问题示例(类似系统示例): 1. Vue.js的核心特性是什么? 2. React的主要用途有哪些? 3. 如何选择Vue.js或React? 完整回答框架: 1. 介绍Vue.js和React。 2. 对比关键点:虚拟DOM更新策略。 3. 发展史简述。 4. 相关问题。 内容填充: - Vue.js:一个渐进式JavaScript框架,用于构建用户界面。由尤雨溪创造,发布于2014年。 - React:一个JavaScript库,用于构建用户界面,由Facebook开发,发布于2013年。 - 虚拟DOM:两者都使用虚拟DOM来提高性能。 - React:采用自顶向下的全量diff(比较整个树)。 - Vue:采用局部订阅模式(只关注订阅变化的组件)[^1]。 添加可靠信息: - 确保真实:我知道Vue更易上手,React更灵活(但不矛盾引用)。 - 发展史:从引用[^2],12-15年演变。 相关问题: 1. Vue.js和React的性能差异如何? 2. 学习Vue.js或React的推荐资源? 3. Vue.js和React在大型应用中的适用性? 最后,输出格式: - 回答使用中文。 - 结尾添加“§§相关问题§§”部分。 </think>### Vue.js和React相关信息介绍 Vue.js和React都是现代前端开发中广泛使用的JavaScript工具,用于构建用户界面(UI)。它们通过虚拟DOM(Virtual DOM)机制优化页面渲染性能,但设计理念和实现方式各有不同。下面我将基于引用内容,逐步为您梳理关键信息。 #### 1. **Vue.js和React的基本概述** - **Vue.js**:是一个渐进式JavaScript框架,由尤雨溪于2014年发布。它强调“渐进式”设计,允许开发者从简单的组件开始,逐步扩展到复杂的应用程序。Vue的核心特点是易上手、响应式数据绑定和灵活的模板系统,适合中小型项目或初学者[^2]。 - **React**:是一个JavaScript库,由Facebook于2013年发布。它专注于构建组件化UI,使用JSX语法(JavaScript XML)声明式地描述视图。React的核心优势在于高性能和可扩展性,尤其适合大型应用或团队协作。它不是完整的框架,而是提供UI层解决方案,常与Redux等库配合使用[^2]。 两者都起源于前端框架发展史:2014年左右,Angular 1.0和React兴起,2015年Vue.js发布,标志着组件化开发成为主流。在此之前,前端开发依赖于jQuery等工具(2013年),而早期则以HTML/CSS静态页面为主(2012年)[^2]。 #### 2. **核心对比:虚拟DOM更新策略** Vue.js和React都通过虚拟DOM机制提升渲染效率——先在内存中创建一个轻量级的DOM树副本,比较变化后再更新实际DOM。但它们的更新策略有显著差异: - **React**:采用“自顶向下的全量diff”策略。这意味着当状态变化时,React会从根组件开始,递归diff整个虚拟DOM树,找出所有差异后进行批量更新。这种方式确保了数据一致性,但可能在大规模应用中带来性能开销(因为每次变化都需要遍历完整树)[^1]。 - **Vue.js**:采用“局部订阅的模式”。Vue为每个组件建立了依赖关系,当数据变化时,只订阅并更新相关组件(而不是整个树)。这得益于其响应式系统,能精确追踪数据变化,减少不必要的计算,提升局部更新效率[^1]。 两者的共同点: - **只解决同层diff**:ReactVue都专注于同层级元素的比较(例如,比较同一父节点下的子节点),而不处理跨层diff(如p标签直接变成div标签),这简化了算法复杂度[^1]。 - 更多技术细节可参考:[浅析reactvue中的diff策略](https://zhuanlan.zhihu.com/p/20346379)[^1]。 #### 3. **其他关键区别** - **学习曲线**:Vue.js文档友好、模板语法类似HTML,上手更快;React的JSX需要适应JavaScript扩展语法,但灵活性更高。 - **生态系统**:React有庞大社区,支持React Native(移动开发)、Next.js(服务端渲染);Vue.js有Vue Router、Vuex(状态管理)等官方工具。 - **适用场景**:Vue.js常用于快速开发中小型应用(如电商页面);React更适合大型企业应用(如Facebook、Instagram)。两者都支持Electron(用于构建桌面应用),但Electron本身是一个框架,基于Chromium和Node.js,可嵌入VueReact组件[^1]。 总之,Vue.js以简洁和响应式见长,React以性能和生态强大著称。选择哪个取决于项目规模、团队经验和需求复杂性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值