vue 和 react 有什么区别呢?下面从这 4 个角度来说一说!

(1)从编程范式的角度讲 在 vue-loader、vue-template-compiler 的支持下,vue 可以采用 SFC 单文件组织的方式实现组件化;vue 有指令,使用指令能够方便地渲染视图,vue 表单是双向绑定的;vue 组件是基于选项式的编程,常用选项有生命周期、计算属性、侦听器等;vue 的组件库十分繁荣,自定义属性、自定义事件、自定义插槽是 vue 组件化的三大基础。众多社区中的 vue 轮子,在 vue 架构中被 Vue.use 注册即可使用。

react 的语法基础是 JSX,react 中没有指令,元素渲染、条件渲染、列表渲染、动态样式都是基于 JSX 语法的。在 webpack 环境中,要安装 @babel/core、@babel/preset-react 等,实现对 JSX 的编译。React 表单是单向绑定的,推荐使用受控表单。组件封装可以是类组件,也可以函数式组件,其中 props 是 React 组件化的核心。

(2)从组件通信的角度讲 在 vue 组件通信中,跨组件通信的手段极其丰富且灵活,常用的通信方案有父子组件通信、ref 通信、事件总线、provide/inject、parent/children、listeners/attrs、slot 插槽通信等。除此之外,在 vue 中还可以使用 vuex 或 mobx 来实现跨组件通信。总体上来讲,vue 的组件通信极其灵活,自上而下、自下而上都是容易实现的;也正是因为过于灵活,这会 “诱惑” 开发者容易滥用通信手段,导致 vue 项目呈现出 “易开发、难维护” 的现状。

在 react 中数据是单向数据流,在组件树中数据只能自上而下地分发和传递。state 是组件自有的状态数据,props 是父级组件传递过来的数据。在 react 中最最基本的通信方案是状态提升,还有 React 上下文也可以实现自上而下的数据流。鉴于 react 这种数据流的特性,即使集成了 Redux 仍然会呈现出单向数据流的特征,因此 React 数据流更容易被管理,配合 Redux 一起更适合做中大型的项目开发。

(3)从底层原理的角度讲 vue 支持指令是因为背后有 vue-template-compiler 这个编译器的支持,把带有指令的视图模板转化成 AST 抽象语法树,进一步转化成虚拟 DOM。vue 的响应式原理是使用了 Object.defineProperty 进行了数据劫持,数据劫持发生 vue 组件的创建阶段,vue 的响应式原理和 mobx 状态管理的响应式原理相似,这种响应式实现最早出现在 knockout 框架。如果要手写一个简单版本的 vue,需要实现 Compiler 类(用于模板编译)、Watcher 类(用于更新视图)、Dep 类(用于依赖收集)、Observer 类(用于数据劫持)、Vue 类(构造函数)等。

react 自 v16 以后发生了很多变化,v16 以后底层的 “虚拟 DOM” 不再是简单 JSON 数据了,React 采用了最新的 Fiber(双向链表)的数据结构,作为 “协调”(Diff)运算的基础数据。React 背后还提供了强大的 react-reconciler 和 scheduler 库实现 Fiber 链表的生成、协调与调度。相比 vue 组件,react 在较大组件方面的性能更高。如果要手写一个简易版本的 React,其核心要实现以下功能,createElement(用于创建元素)、createDOM/updateDOM(用于创建和更新 DOM)、render/workLoop(用于生成 Fiber 和协调运算)、commitWork(用于提交)等,如果还有支持 Hooks,还得封闭 Hooks 相关的方法。

(4)从社区发展和未来展望的角度讲 vue 生态繁荣,用户基础大。vue3.0 和 vite 的诞生给 vue 生态增加了新的生命力,同时也给 vue 开发者带来了空前的挑战。vue3.0 众多新特性,以组合 API、更友好地支持 TS 为代表,使得 vue3.0 的写法更加灵活。上手 vue3.0 并不难,但,要想写出健壮的可维护性更强的 vue3.0 代码,并不容易,这需要广大的前端开发者有更强大的前端基础功,对 MVVM 有深刻的理解和沉淀。

react 生态稳步向前,背后有强大的 Facebook 开发团队,从类组件编程向 Hooks 编程的转化指明了前进的方向。React (v18) 呼之欲出,让前端开发者对 React 更具信心。在国内,阿里系的 React 开源项目繁荣,给以开发者足够的信心,至少三五年内深耕 React 仍然大有可为。

vue 和 react 的区别有哪些的更多相关文章

  1. 前端框架 vue 和 react 的区别

    前言:最近需要使用 react,以前用过 vue,故来总结两者的区别. 首先React与vue有几点相同之处 1.都使用了Virtual DOM 2.提供了响应式(Reactive)和组件化(Comp ...

  2. Vue和React的区别,以及如何选择?

    简介 React:React是一个用于创建可重用且有吸引力的UI组件的库.它非常适合代表经常变化的数据的组件. Vue:Vue.js是一个开源JavaScript框架,能够开发单页面应用程序.它还可以 ...

  3. bootstrap与vue,react的区别

    链接(与Vue区别):https://www.php.cn/faq/423095.html 链接(BootStrap, React, Vue的比较):https://www.jianshu.com/p ...

  4. vue 和react的区别

    1.数据是不是可变的 react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,所以在react中,是单向数据流,推崇结合immutable来实现数据不可变. react在setSta ...

  5. vue和react动画区别

    触发动画 vue触发动画是 v-show,v-if ,动态组件或者组件的根节点 react 是CSSTransition上的属性 in 是true 或false触发动画

  6. 1.vue和react的区别

    1.个人感觉Vue好用,react不咋地呀. 2.(网上搜的)Vue的解决方案适用于小型应用,但对于对于大型应用而言不太适合.

  7. vue和react的区别

    数据: vue:双向数据绑定和单向数据流.双向数据绑定:DOM元素绑定的data值,当发生改变后,vue的响应式机制会自动监听data的变化重新渲染.单向数据流:当父组件给子组件传递数据的时候,子组件 ...

  8. Vue与React的区别

    对已经了解的内容,做几点介绍,并不全面,后期会不断更新~ React与Vue都是组件化的开发框架,整体功能类似. 一.数据处理模式(单项 or 双向): React推崇单项数据流的处理模式,数据不可以 ...

  9. 前端两大框架 vue 和 react 的区别

    1. 设计思想 vue: vue的官网介绍说vue是一种渐进式框架,采用自底向上增量开发的设计: react: 采用函数式编程,推崇纯组件,数据不可变,单向数据流: 2. 编写语法 vue: 采用单文 ...

  10. Vue与React的异同

    众所周知,前端现在最火的两个框架是Vue和React了.通过一段时间的学习与项目上的实践,我想通过比较他们之间的异同点来发现以后在项目的技术选型中知道怎么抉择用哪个.有一点说明的是他们各自有自己的优势 ...

随机推荐

  1. CGTime CMTimeRange CMTimeMapping 小结

    CMTime CMTimeRange CMTimeMapping 在使用 AVFoundation 框架处理多媒体资源时,通常会用到一些在 CoreMedia 框架中定义的结构体, 这里对其中描述时间 ...

  2. python基础篇 12-函数+文件读写+json练习作业

    需求: 写一个管理商品的程序,商品文件格式在a.json里面 提供商品的增删改查功能 choice = input('请输入你的选择:1.查看商品 2.新增商品 3.修改商品 4.删除商品') #1. ...

  3. 如何使用autotools/automake自动生成Makefile文件

    前言: Linux下编程时,为了方便编译,往往使用Makefile文件自动完成编译,但是Makefile文件本身的书写十分复杂,规则很多.好在Linux为我们提供了自动生成功能完善的Makefile文 ...

  4. python起航之路 Day1

    一.Python安装 windows 1.下载安装包 https://www.python.org/downloads/2.安装 默认安装路径:C:\python273.配置环境变量 [右键计算机]- ...

  5. Vue3 流程图组件库 Vue Flow 简单使用

    官网 Vue Flow 官网 Vue Flow GitHub 安装 npm i --save @vue-flow/core yarn add @vue-flow/core pnpm i @vue-fl ...

  6. C#-读取写入Excel

    /// <summary>  /// 读取Excel文档  /// </summary>  /// <param name="Path">文件名 ...

  7. 12.8 linux学习第十五天

    今天老刘讲了第11章和第12章,感觉讲的速度很快,一气呵成,水都没怎么喝. 11.1 文件传输协议 一般来讲,人们将计算机联网的首要目的就是获取资料,而文件传输是一种非常重要的获取资料的方式.今天的互 ...

  8. 基于airtest验证Android端app是否安装及自动化安装

    ​ 1.检测app是否安装: 使用check_app方法检测是否安装:为什么需要在封装一层做断言呢?主要check_app方法安装成功会返回True,但是未检测到安装时直接报异常了,停止执行.无法直接 ...

  9. HashMap中的Entry接口

    利用Entry接口,快速又方便 import java.util.HashMap; import java.util.Map; public class MapDemo { public static ...

  10. YY播放器源码解析

    YY播放器使用Flutter编写的一个聚合播放器, 起因是看了 ZY-Player的源码, 发现实现挺有意思的, 也比较简单 地址: https://github.com/waifu-project/ ...