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. 排球计分程序的uml图

  2. win10下 pytorch 跑模型 gpu利用率低

    查阅资料后发现 Dataloader中的num_workers参数(线程数)设置为0,该为4后,nvidia-smi查看GPU占用率变为高(不要用任务管理器查看)

  3. 一个基于线程池和epoll的IO事件管理器

    前面几篇博客介绍了Epoll, ThreadPool, 其中 Epoll 封装了epoll的各类api, 可在epoll句柄中添加/修改/删除 fd 的 各类事件(EPOLLIN | EPOLLOUT ...

  4. sql:常用:group by 多个字段

    首先group by 的简单说明:   group by 一般和聚合函数一起使用才有意义,比如 count sum avg等,使用group by的两个要素:   (1) 出现在select后面的字段 ...

  5. impdp,depdp 常用参数

    转载于:https://www.cnblogs.com/halberd-lee/p/7807032.html 1 导数据注意事项 检查数据库版本(用于决定导出时生成为哪个版本的dmp头文件) sele ...

  6. 通过Windows定时任务执行Python脚本给钉钉群发送消息

    前提:已经存在有成功发送钉钉群机器人消息的python脚本,参考上一篇Python调用钉钉群机器人发送群消息 Windows定时任务设置 1.本机是Win7系统:控制面板->系统和安全-> ...

  7. spring-boot-starter-webflux 与spring-cloud-starter-openfeign冲突

    Thu Oct 22 17:16:01 CST 2020 [3be84a1c-14] There was an unexpected error (type=Internal Server Error ...

  8. tomcat8.5.55启动失败service tomcat start 报错

    问题描述: Neither the JAVA_HOME nor the JRE_HOME environment variable is defined At least one of these e ...

  9. 2月23日javaweb之Maven

    Maven常用命令 compile:编译 clean:清理 test:测试 package:打包 install:安装 Maven生命周期 Maven对项目构建的生命周期描述是一次构建过程经历了多少个 ...

  10. 一,创建一个electron应用程序

    之前我们已经用html+css+js创建了一个项目,现在将这个项目用electron以应用程序呈现. 1,首先新建一个文件夹,从终端进入该文件夹: 2,在该文件夹下执行npm init,初始化该项目. ...