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…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
【项目实战】通过多模态+LangGraph实现PPT生成助手
PPT自动生成系统 基于LangGraph的PPT自动生成系统,可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析:自动解析Markdown文档结构PPT模板分析:分析PPT模板的布局和风格智能布局决策:匹配内容与合适的PPT布局自动…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...
