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. 【NumPy】Python利用linspace进行数据采样

    情景 假设有一堆长度为1000的数据,我现在只想要其中800个并且要求整体趋势一样,那就可以试试使用linspace进行等间距的采样. 简介 linspace(start, stop, num=50, ...

  2. SpringBoot整合其他框架

    SpringBoot整合Junit 实现步骤 搭建SpringBoot工程 引入starter-test起步依赖 编写测试类 添加测试相关注解 @RunWith(SpringRunner.class) ...

  3. CSS手册

    3. CSS背景 1. 颜色 body {background-color:#b0c4de;} 十六进制 - 如:"#ff0000" RGB - 如:"rgb(255,0 ...

  4. COLMAP论文阅读笔记——sfm算法、不定期更新

    文章目录 structure from motion revisited 第一步 对应点搜索 特征提取feature extraction 匹配matching 几何验证geometric verif ...

  5. pt-query-digest 工具使用分析

    pt-query-digest是用于分析mysql慢查询的一个工具,它可以分析binlog.General log.slowlog,也可以通过SHOW PROCESSLIST或者通过tcpdump抓取 ...

  6. PTA1004 成绩排名 (20 分)

    PTA1004 成绩排名 读入 n(>0)名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式: 每个测试输入包含 1 个测试用例,格式为 第 1 行:正整数 n 第 ...

  7. vue项目安装淘宝镜像一直失败,解决办法

    这个问题纠缠了我好几天,刚开始把npm,node卸载了重装,发现还是一样的问题,最后发现是权限不够,下面这个方法完美解决 失败原因:没有用管理员权限执行, 解决办法:找到安装nodejs安装的路径,再 ...

  8. 3月2号Android开发学习

    (2)视图基础 1.设置视图的高度 视图宽度通过属性Android:layout_width表达,视图高度通过属性android:layout_heigth表达,宽高的取值主要有以下三种 1.matc ...

  9. eclipse project is missing required java project

    eclipse project is missing required java project eclipse版本: 2022-03 这情况就是maven包出了问题 具体的说不上 看我的解决方法: ...

  10. 批量cp时中断,原来是被cp的alias干扰了

    背景 批量复制一批数据的质控结果的时候,由于表格中出现一个重复项,导致卡在是否覆盖的提示这里 结果该重复项之后的样本都没有复制成功,差点就漏掉一部分样本啊-- cat ../sampleList|wh ...