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. prophet安装(ubuntu16 python3.6)

    ubuntu16 python3.6 (ubuntu16自带的python3是3.5 升级至3.6可参考https://blog.csdn.net/weixin_42544006/article/de ...

  2. jp@gc - PerfMon Metrics Collector:服务器性能监测控件

    1.下载客户端及服务器端插件: 参考如下地址:https://blog.csdn.net/qq_36643889/article/details/119142106 JMeterPlugins-Sta ...

  3. keras构建1D-CNN模型

    接触过深度学习的人一定听过keras,为了学习的方便,接下来将要仔细的讲解一下这keras库是如何构建1D-CNN深度学习框架的 from keras.datasets import imdb fro ...

  4. Treewidget 节点的遍历

    父节点的遍历 // Treewidget遍历操作 // 只遍历父节点 int nParentNodeCount = ui->treeWidget->topLevelItemCount(); ...

  5. Unity 2D 记录

    Unity 2D 记录 1. 环境配置 1.1 下载安装unity hub和vs code 搜索unity hub 进行下载 https://unity.com/download 安装vs code ...

  6. C++ 用运算符重载 实现复数相加

    #include "stdafx.h" #include <iostream> using namespace std; class Complex {public: ...

  7. 关于js数组方法forEach()

    1.forEach()是什么? forEach()是一种数组遍历方法. 在js最基础的遍历数组方法可能是这样的 点击查看代码 var myArr = [1, 2, 3] for(var i = 0; ...

  8. node后台项目所需中间件梳理

    0.nodemon 全局工具,监听项目文件变动,并自动重启项目 一.node内置模块 1.fs fs.readFile()  读取指定文件中的内容fs.writeFile()  向指定的文件中写入内容 ...

  9. mybatis-plus 3.4.3.1 进行批量 saveOrUpdate

    service类通过 SqlHelper.saveOrUpdateBatch 实现通过自定义的 唯一索引 进行 批量保存更新 import com.baomidou.mybatisplus.core. ...

  10. Jmeter----Badboy录制

    Badboy Badboy安装后出现错误,需要设置 Preferences-->General-->Enable Recording on Startup?的√去掉,play-->S ...