vue 和 react 的区别有哪些
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 的区别有哪些的更多相关文章
- 前端框架 vue 和 react 的区别
前言:最近需要使用 react,以前用过 vue,故来总结两者的区别. 首先React与vue有几点相同之处 1.都使用了Virtual DOM 2.提供了响应式(Reactive)和组件化(Comp ...
- Vue和React的区别,以及如何选择?
简介 React:React是一个用于创建可重用且有吸引力的UI组件的库.它非常适合代表经常变化的数据的组件. Vue:Vue.js是一个开源JavaScript框架,能够开发单页面应用程序.它还可以 ...
- bootstrap与vue,react的区别
链接(与Vue区别):https://www.php.cn/faq/423095.html 链接(BootStrap, React, Vue的比较):https://www.jianshu.com/p ...
- vue 和react的区别
1.数据是不是可变的 react整体是函数式的思想,把组件设计成纯组件,状态和逻辑通过参数传入,所以在react中,是单向数据流,推崇结合immutable来实现数据不可变. react在setSta ...
- vue和react动画区别
触发动画 vue触发动画是 v-show,v-if ,动态组件或者组件的根节点 react 是CSSTransition上的属性 in 是true 或false触发动画
- 1.vue和react的区别
1.个人感觉Vue好用,react不咋地呀. 2.(网上搜的)Vue的解决方案适用于小型应用,但对于对于大型应用而言不太适合.
- vue和react的区别
数据: vue:双向数据绑定和单向数据流.双向数据绑定:DOM元素绑定的data值,当发生改变后,vue的响应式机制会自动监听data的变化重新渲染.单向数据流:当父组件给子组件传递数据的时候,子组件 ...
- Vue与React的区别
对已经了解的内容,做几点介绍,并不全面,后期会不断更新~ React与Vue都是组件化的开发框架,整体功能类似. 一.数据处理模式(单项 or 双向): React推崇单项数据流的处理模式,数据不可以 ...
- 前端两大框架 vue 和 react 的区别
1. 设计思想 vue: vue的官网介绍说vue是一种渐进式框架,采用自底向上增量开发的设计: react: 采用函数式编程,推崇纯组件,数据不可变,单向数据流: 2. 编写语法 vue: 采用单文 ...
- Vue与React的异同
众所周知,前端现在最火的两个框架是Vue和React了.通过一段时间的学习与项目上的实践,我想通过比较他们之间的异同点来发现以后在项目的技术选型中知道怎么抉择用哪个.有一点说明的是他们各自有自己的优势 ...
随机推荐
- Typora的下载和MarkDown的相关操作
MarkDown 作为程序员就要会写blog(网络日记),那么怎么让你的笔记写的排版舒适清晰?我们可以通过MarkDown来写笔记 首先我们要下载Typora,因为现在官网的Typora要付费,所以可 ...
- KinectFusion算法论文解读/代码解读随笔
--2021.6.8 上图是kinectfusion的流程图,是整个系统的工作流.我们对上面的流程进行分析以及相关代码的解读,使用的代码库是pcl的Kinectfusion复现.(ps:因为我只在ub ...
- FATAL Exited too quickly (process log may have details)的解决方案
作为一个混混的开发,不会啥容器操作.所以一般都是用supervisor来管理一些运行的进程 用了一段时间还是比较好用的,这个软件也是用的Python开发. 但在使用的过程中,status时会出现 FA ...
- SQL servr——基础篇之DML增删改查
DML:数据操作语言 用于添加.更新.删除和查询数据库中的语言 添加--insert语句 向数据表中插入新的行(记录)可多行可一行 语法:insert [into] 表名 [(column1,. ...
- wavesurfer音波插件之播放指定语音片段
使用wavesurfer音波插件时,可能会用到这么一个功能,点击音转文后的某一句文字,则需要在音波条上进行播放这一段录音,恰好wavesurfer插件自带这么一个功能,直接上代码: <scrip ...
- mysql零基础-2
更新中的数据完整性错误 UPDATE employees SET department_id = 55 WHERE department_id = 110; 删除数据 删除一条记录 DELETE FR ...
- Element-ui树形控件el-tree鼠标移入显示隐藏效果超简单
显示效果: 废话不多说,直接上代码 <template> <el-tree default-expand-all :data="data"> <spa ...
- Latex基础
文档类 latex提供的基础文档类 article report book proc slides minimal 特殊符号 空格 命令后边空格 1. 字母形式的latex命令忽略其后的所有连续空格, ...
- linux查看所有的用户和组信息
1.cat /etc/passwd 查看所有用户 2.cat /etc/passwd|grep 用户名,用于查找某个用户 3.cat /etc/group查看所有组信息 4.cat /etc/g ...
- linux 部署轻量级堡垒机Next Terminal
对比 类似的开源堡垒机有 Teleport,Jumpserver,Next Terminal等等. Teleport 安全性最好,较轻量,但是对被管理资产不透明,纳管前需要双向认证,在资产设备上需额外 ...