React与Vue的对比
异同总结
相同点:
-
都有组件化思想
-
都支持服务器端渲染
-
都有Virtual DOM(虚拟dom)
-
数据驱动视图
-
都有支持native的方案:
Vue的weex、React的React native -
都有自己的构建工具:
Vue的vue-cli、React的Create React App
区别:
-
数据流向的不同。
react从诞生开始就推崇单向数据流,而Vue是双向数据流 -
数据变化的实现原理不同。
react使用的是不可变数据,而Vue使用的是可变的数据 -
组件化通信的不同。
react中我们通过使用回调函数来进行通信的,而Vue中子组件向父组件传递消息有两种方式:事件和回调函数 -
diff算法不同。
react主要使用diff队列保存需要更新哪些DOM,得到patch树,再统一操作批量更新DOM。Vue使用双向指针,边对比,边更新DOM
具体分析
数据状态
为什么vue用data,react用state
1. Vue 中的 data()
data函数返回的对象,内存地址并不相同,每个实例对象的数据不会收到其他实例对象数据的污染
-
数据响应式系统:
-
Vue 的核心特性之一是其响应式系统,它能够自动追踪组件依赖并在数据变化时自动更新视图。
-
Vue 通过
data()函数来定义组件的状态,这个函数返回一个对象,该对象中的属性会被 Vue 转换为响应式的。这意味着当这些数据发生变化时,Vue 会自动更新相关的视图。
-
-
组件复用性:
-
在 Vue 中,尤其是使用单文件组件时,每个组件都是一个类的实例。因此,为了避免多个实例共享同一个
data对象,Vue 要求data必须是一个函数,从而每次创建新实例时,都会返回一个新的data对象。这确保了组件实例之间的状态是相互独立的。 -
举例来说,多个按钮组件可以独立地管理自己的状态,而不会相互干扰。
-
export default {data() {return {count: 0, // 组件状态};},methods: {increment() {this.count++;}}
};
-
这里的
data()返回一个对象,Vue 会将其转换为响应式数据。当count改变时,Vue 自动更新视图。
2. React 中的 state
-
函数式编程风格:
-
React 更倾向于函数式编程理念,
state是组件内部的状态管理工具。React 使用useState钩子(在函数组件中)或this.state和this.setState(在类组件中)来管理状态。 -
在 React 中,状态管理是通过显式调用
setState(类组件)或useState的状态更新函数(函数组件)来触发的。每次状态更新都会触发组件的重新渲染。
-
-
不可变性:
-
React 强调状态的不可变性,每次状态更新时,
setState不会修改原始状态,而是返回一个新的状态对象。这与 Vue 的响应式系统不同,Vue 会直接修改状态对象。 -
不可变性使得 React 更容易进行调试和优化,如在组件的
shouldComponentUpdate或React.memo中判断状态是否发生变化。
-
import React, { useState } from 'react';
function Counter() {const [count, setCount] = useState(0); // React 的 state
return (<div><p>Count: {count}</p><button onClick={() => setCount(count + 1)}>Increment</button></div>);
}
-
这里的
useState钩子用于声明组件的状态,并返回当前状态和更新状态的函数。
-
对比总结
状态初始化与管理
-
Vue 的 data() 函数:
-
每个组件实例都有独立的状态,因为
data()每次都返回一个新的状态对象。 -
响应式数据直接更新会自动触发视图更新。
-
-
React 的 state:
-
状态是不可变的,状态更新是通过
setState(类组件)或useState(函数组件)来管理的,更新状态会触发重新渲染。 -
函数式组件中使用
useState钩子进行状态管理,更加符合 React 的函数式编程风格。
-
组件复用性
-
Vue:
-
由于
data()返回一个新的对象,每个组件实例都有自己独立的状态,这使得复用组件更加安全和简单。
-
-
React:
-
React 通过
useState或this.state来管理状态,每个组件实例的状态也是独立的。
-
总结
-
Vue 使用
data()函数来初始化组件状态,主要是为了支持其响应式系统和确保组件实例之间的状态独立。 -
React 使用
state来管理组件状态,强调不可变性和函数式编程,这与 Vue 的响应式数据模型有所不同。
react的单向数据流和vue的双向数据流对比?
React 单向数据流
-
数据流向:
-
数据从父组件通过
props传递给子组件。 -
子组件不能直接修改父组件的数据,只能通过回调函数将数据传回父组件。
-
-
状态管理:
-
使用
useState、useReducer或外部状态管理库(如 Redux)来管理状态。
-
Vue 双向数据绑定
-
数据流向:
-
使用
v-model实现表单元素的双向绑定,自动同步数据和 UI。 -
父组件可以通过
props传递数据给子组件,子组件可以通过$emit事件将更新传回父组件。
-
-
状态管理:
-
使用
data、computed、watch等来管理组件状态。 -
可以使用 Vuex 进行全局状态管理。
-
组件化通信方式?
react中我们通过使用回调函数来进行通信的,而Vue中子组件向父组件传递消息有两种方式:事件和回调函数。
React
-
回调函数
-
父组件将一个函数作为
props传递给子组件。 -
子组件调用这个函数,将数据传递回父组件。
-
Vue
-
事件:
-
子组件使用
$emit触发一个事件,父组件监听这个事件来接收数据。 -
常用于父组件需要响应子组件的某个动作。
-
-
回调函数:
-
父组件可以将一个函数作为
props传递给子组件。 -
子组件调用这个函数,将数据传递回父组件。
-
类似于 React 的方式。
-
diff算法
React 的 Diff 算法
-
Diff 队列:
-
React 会对新旧虚拟 DOM 树进行比较,找出变化的部分。
-
使用 diff 队列记录需要更新的节点。
-
-
Patch 树:
-
根据 diff 队列生成 patch 树,描述如何更新实际 DOM。
-
最后批量应用这些更新,减少直接操作 DOM 的次数。
-
-
优化策略:
-
假设同层级比较,不跨层级移动节点。
-
使用 key 来优化列表 diff,快速定位节点变化。
-
Vue 的 Diff 算法
-
双向指针:
-
Vue 使用双向指针(从头和尾同时遍历)来比较新旧节点。
-
通过指针移动来确定节点的增删改。
-
-
边对比边更新:
-
在对比的同时直接更新实际 DOM。
-
更加实时地处理节点更新。
-
-
优化策略:
-
使用 key 来优化列表更新。
-
通过模板编译生成优化的渲染函数,减少不必要的更新。
-
总结
-
React:构建 patch 树后批量更新,适合大型应用的复杂更新。
-
Vue:边对比边更新,实时处理更新,适合高效处理小规模更新。
关注我,不迷路!
会不定时为大家更新优质内容,欢迎👍🏻+⭐️+☁️!!!方便随时查阅
相关文章:
React与Vue的对比
异同总结 相同点: 都有组件化思想 都支持服务器端渲染 都有Virtual DOM(虚拟dom) 数据驱动视图 都有支持native的方案:Vue的weex、React的React native 都有自己的构建工具:Vue的vue-cli、React的Create React A…...
精密量测软件(仿KLA免费浏览器程序ProfilmOnline)
KLA在线软件分析图 软件仿KLA公司免费浏览器软件ProfilmOnline,软件地址ProfilmOnline - 用于3D轮廓仪和AFM的表面成像、分析和测量软件 可以直接从profilmonline上下载3D图加载对比分析,当前已完成的内容有 1、调平 2、尖峰去噪 3、能量密度图&…...
Java项目: 基于SpringBoot+mybatis+maven实现的IT技术交流和分享平台(含源码+数据库+毕业论文)
一、项目简介 本项目是一套基于SpringBootmybatismaven实现的IT技术交流和分享平台 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美…...
STL02——手写简单版本的list
手写一个简单版本的list 设计一个名为 List 的 List 类,该类具有以下功能和特性: 1、基础成员函数 构造函数:初始化 List 实例析构函数:清理资源,确保无内存泄露 2、核心功能 在 List 末尾添加元素在 List 开头添…...
基于SpringBoot的校园自助洗衣服务管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的校园自助洗衣服务…...
音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件
在文章《音视频入门基础:PCM专题(1)——使用FFmpeg命令生成PCM音频文件并播放》中讲述了生成PCM文件的方法。通过FFmpeg命令可以把该PCM文件转为AAC裸流文件: ./ffmpeg -f s16le -ar 44100 -ac 2 -i audio1.pcm audio1.aac 由于…...
第 6 篇 自定义 Helm Chart
文章目录 第 1 步:创建 chartChart.yamlvalues.yamltemplates 模板文件_helpers.tpl 模板辅助文件serviceaccount.yamlservice.yamldeployment.yamlhpa.yamlingress.yamlNOTES.txttests/test-connection.yaml 第 2 步:检查 chart 格式第 3 步:…...
Jenkis部署vue前端项目提示:sh: vue-cli-service: command not found
解决方法: 1. 进入到/var/lib/jenkins/workspace/项目名下,查看是否有node_modules,如果没有执行 npm install 2. 如果执行npm intall的过程中提示:npm ERR! 407 Proxy Authentication Required - GET http://registry.npm.taob…...
中介者模式mediator
学习笔记,原文链接 https://refactoringguru.cn/design-patterns/mediator 减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。...
GO语言性能分析
Go语言基准测试与pprof工具性能分析详解 在现代软件开发中,性能优化是一个重要的环节。Go语言提供了强大的工具来进行基准测试和性能分析,其中 testing 包用于基准测试,而 pprof 工具用于性能分析。本文将详细讲解如何使用这些工具来进行性能…...
关于 PreparedStatement
Mysql 层面的语法也支持 prepare 这个确实第一次见 PREPARE prepares a statement for execution (see Section 13.5.1, “PREPARE Statement”).EXECUTE executes a prepared statement (see Section 13.5.2, “EXECUTE Statement”).DEALLOCATE PREPARE releases a prepared…...
漫谈设计模式 [9]:外观模式
引导性开场 菜鸟:老鸟,我最近在做一个项目,感觉代码越来越复杂,我都快看不懂了。尤其是有好几个子系统,它们之间的调用关系让我头疼。 老鸟:复杂的代码确实让人头疼。你有没有考虑过使用设计模式来简化你…...
多进程编程
基本概念 进程是一个具有单独功能的程序对某个数据集在处理机上的执行过程,进程也是作为资源分配的一个单位。 进程和程序是相辅相成的,进程是一个动态概念。 进程具有并行性特征。进程具有独立性和异步性。 进程的描述 进程分为三部分:…...
7-Zip压缩包如何添加密码,加密后如何取消
压缩包文件大家经常使用,最熟悉的肯定是RAR、ZIP格式压缩文件,但是7z压缩文件格式也很好用,它是三种压缩文件格式中压缩率最大的。想要将文件压缩到最小,使用7z格式可以达到最大化。那么在使用7z压缩格式的时候,我们可…...
HarmonyOS---应用测试概述
一、应用质量要求 应用质量要求分为应用体验质量建议和应用内容合规要求两大部分。 1、应用体验质量建议 功能数据完备、基础体验要求、HarmonyOS特征增强体验要求。 (1)功能数据完备 (2)基础体验要求 (3)增…...
密码学---真题演练
✨Base加密:题目-base? 靶场网址:https://polarctf.com/ Base100加密!!! 得到的新的一串密码是 rot47 密码,属于凯撒密码的一种变体. ✨斐波那契:题目-FB 从第三项开始,每一项都等…...
时间日期工具类
时间日期工具类 import java.time.*; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit;public class DateTimeUtils {private static final String DEFAULT_DATE_FORMAT "yyyy-MM-dd";private static final String DEFAULT_TIME_…...
linux中vim常用命令大全
前言 Linux有大量的配置文件,所以 Linux的文本处理工具也是比较多的,其中编辑一些配置文件时,常用的工具就是 vim。在Linux中,Vim编辑器是一个非常强大的文本编辑工具,它提供了多种模式和命令来满足不同的编辑需求。以…...
计算机的错误计算(八十九)
摘要 探讨反双曲余切函数 acoth(x) 在 附近的计算精度问题。 Acoth(x) 函数的定义为: 其中 x 的绝对值大于 1 . 例1. 计算 acoth(1.000000000002) . 不妨在 Excel 的单元格中计算,则有: 若在Python中用定义直接计算,则有几乎…...
深入理解java并发编程之aqs框架
跟synchronized 相比较,可重入锁ReentrankLock其实原理有什么不同? 所得基本原理是为了达到一个目的;就是让所有线程都能看到某种标记。synchronized通过在对象头中设置标记实现了这一目的,是一种JVM原生的锁实现方式。而Reentran…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具
第2章 虚拟机性能监控,故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令:jps [options] [hostid] 功能:本地虚拟机进程显示进程ID(与ps相同),可同时显示主类&#x…...
【生成模型】视频生成论文调研
工作清单 上游应用方向:控制、速度、时长、高动态、多主体驱动 类型工作基础模型WAN / WAN-VACE / HunyuanVideo控制条件轨迹控制ATI~镜头控制ReCamMaster~多主体驱动Phantom~音频驱动Let Them Talk: Audio-Driven Multi-Person Conversational Video Generation速…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)
LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...
Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...
spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
《信号与系统》第 6 章 信号与系统的时域和频域特性
目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...
