Vue 3响应式对象: ref和reactive
目录
什么是响应式对象?
Ref
Reactive
Ref vs Reactive
适用场景:
访问方式:
引用传递:
性能开销:
响应式对象优点
响应式对象缺点
总结
Vue 3作为一种流行的JavaScript框架,提供了响应式编程的能力,使得前端开发更加便捷和高效。其中,ref
和reactive
是Vue 3中用于创建响应式数据的两个重要工具。
什么是响应式对象?
在介绍ref
和reactive
之前,我们先了解一下什么是响应式对象。简单来说,响应式对象是指当数据发生改变时,相关的视图会自动更新。这意味着我们只需要关注数据的变化,而无需手动去更新视图。Vue 3通过使用ref
和reactive
来实现响应式。
Ref
ref
是Vue 3中用于创建基本类型的响应式数据的函数。它接收一个初始值作为参数,并返回一个包装后的响应式对象。使用ref
创建的响应式对象可以像普通变量一样进行读取和修改。
import { ref } from 'vue';const count = ref(0);console.log(count.value); // 输出 0count.value++; // 修改响应式数据console.log(count.value); // 输出 1
在上面的例子中,我们使用ref
创建了一个名为count
的响应式对象,并初始化为0。我们可以通过访问.value
属性来读取和修改该响应式对象的值。
Reactive
reactive
是Vue 3中用于创建复杂类型(如对象和数组)的响应式数据的函数。它接收一个普通对象或数组作为参数,并返回一个包装后的响应式对象。
import { reactive } from 'vue';const state = reactive({name: 'John',age: 25
});console.log(state.name); // 输出 'John'state.age++; // 修改响应式数据console.log(state.age); // 输出 26
在上面的例子中,我们使用reactive
创建了一个名为state
的响应式对象,其中包含了name
和age
两个属性。我们可以直接访问响应式对象的属性,并进行修改。所有对属性的修改都会自动触发视图的更新。
Ref vs Reactive
虽然ref
和reactive
都可以用于创建响应式对象,但它们适用于不同的场景:
ref
主要用于创建基本类型的响应式数据,如数字、字符串等。reactive
主要用于创建复杂类型的响应式数据,如对象和数组。
适用场景:
ref
主要用于创建基本类型的响应式数据,如数字、字符串等简单的数据类型。reactive
主要用于创建复杂类型的响应式数据,如对象和数组。
访问方式:
- 使用
ref
创建的响应式对象需要通过.value
来访问和修改其值。即使在模板中使用,也需要通过.value
来访问。 - 使用
reactive
创建的响应式对象可以直接访问和修改其属性。无需额外操作。
引用传递:
ref
创建的响应式对象是包装后的对象,每次访问都会返回相同的引用。这意味着多个地方使用同一个ref
响应式对象时,它们会共享同一个状态。reactive
创建的响应式对象是原始对象的代理,每次访问都会返回新的代理对象。这意味着多个地方使用同一个reactive
响应式对象时,它们不会共享状态。
性能开销:
ref
相对较轻量,适用于处理简单类型的数据。但在模板中使用ref
需要通过.value
访问,可能会增加一些额外的性能开销。reactive
相对较重,适用于处理复杂类型的数据。在模板中直接使用reactive
不需要额外操作,性能开销较低。
响应式对象优点
-
简化开发:Vue 3的响应式机制使得数据变化时视图自动更新,减少了手动操作的工作量。开发者可以更专注于业务逻辑而不用关心视图更新的细节。
-
高效性能:Vue 3采用了更高效的响应式追踪机制(Proxy),相较于Vue 2的Object.defineProperty,在大型应用程序中具有更好的性能表现。它能够更精确地跟踪数据的变化,并只更新受影响的部分,提高了应用程序的整体性能。
-
可读性强:使用响应式对象可以使代码更直观和清晰,易于理解和维护。通过使用
ref
和reactive
来创建响应式数据,开发者可以在代码中清晰地看到哪些数据是响应式的,进而更好地组织和管理数据。 -
组件间通信:响应式对象可以在Vue组件之间实现方便的数据传递和共享。当一个组件修改了响应式对象的值,其他使用同一个响应式对象的组件会自动更新其视图。
响应式对象缺点
-
学习曲线:对于初学者来说,理解Vue 3的响应式机制可能需要一些时间和努力。特别是在处理复杂的数据结构时,可能需要更深入地了解Vue的响应式原理。
-
Proxy的兼容性:Vue 3使用了ES6的Proxy作为响应式追踪机制,而Proxy并不被所有的浏览器完全支持。这意味着在一些旧版本的浏览器中,可能会遇到兼容性问题。
-
开销增加:由于Vue 3的响应式机制需要监听数据的变化,并进行相应的更新操作,这会带来一定的性能开销。特别是在处理大规模的数据集合时,可能会对性能产生一定影响。
尽管存在一些缺点,但Vue 3的响应式对象仍然是许多前端开发者喜欢使用的工具之一。它提供了方便的数据管理和视图更新机制,使得构建复杂的交互式应用程序变得更加容易和高效。
总结
ref
和reactive
是Vue 3中用于创建响应式数据的两个重要函数。通过使用这些工具,我们可以轻松地创建响应式对象,并实现自动更新视图的效果。无论是处理简单类型的数据还是复杂类型的数据,Vue 3提供了适用的工具来满足不同的需求。
希望这篇博客对你理解Vue 3的响应式对象有所帮助!如果有任何疑问,请随时提问。
相关文章:

Vue 3响应式对象: ref和reactive
目录 什么是响应式对象? Ref Reactive Ref vs Reactive 适用场景: 访问方式: 引用传递: 性能开销: 响应式对象优点 响应式对象缺点 总结 Vue 3作为一种流行的JavaScript框架,提供了响应式编程的…...

Unity3D 如何用unity引擎然后用c#语言搭建自己的服务器
Unity3D是一款强大的游戏开发引擎,可以用于创建各种类型的游戏。在游戏开发过程中,经常需要与服务器进行通信来实现一些功能,比如保存和加载游戏数据、实现多人游戏等。本文将介绍如何使用Unity引擎和C#语言搭建自己的服务器,并给…...
带有 Vagrant 和 Virtualbox 的 Elasticsearch 集群
模拟分布式存储和计算环境的一种简单方法是使用 Virtualbox 作为 VM(“虚拟机”)的提供者,使用 Vagrant 作为前端脚本引擎来配置、启动和停止这些 VM。这篇文章的目标是构建一个集群虚拟设备,提供 Elasticsearch 作为可由主机使用…...

Cross Site Scripting (XSS)
攻击者会给网站发送可疑的脚本,可以获取浏览器保存的网站cookie, session tokens, 或者其他敏感的信息,甚至可以重写HTML页面的内容。 背景 XSS漏洞有不同类型,最开始发现的是存储型XSS和反射型XSS,2005,Am…...

VDA到Excel方案介绍之自定义邮件接收主题
VDA标准是德国汽车工业协会(Verband der Automobilindustrie,简称VDA)制定的一系列汽车行业标准。这些标准包括了汽车生产、质量管理、供应链管理、环境保护、安全性能等方面的规范和指南。VDA标准通常被德国和国际上的汽车制造商采用&#x…...

【opencv】【CPU】windows10下opencv4.8.0-cuda C++版本源码编译教程
【opencv】【CPU】windows10下opencv4.8.0-cuda C版本源码编译教程 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【opencv】【CPU】windows10下opencv4.8.0-cuda C版本源码编译教程前言准备工具cmakeopencv4.8.0opencv_contrib CMake编译VS2…...
多分类loss学习记录
这里简单的记录在人脸识别/声纹识别中常用的分类loss。详细原理可以参考其他博客。 扩展资料1 扩展资料2 L-softmax A-softmax AM-softmax L-softmax :基于softmax加入了margin, Wx 改写为||w||||x||cos(角度),将角度变为了m角度 A-softmax &…...

Linux创建逻辑卷并扩容(超详细)
目录 编辑 一、概念解析 1、LV逻辑卷 2、PV物理卷 3、VG卷组 二、扩容前准备 三、创建逻辑卷并扩容 1、打开虚拟机 2、进入root用户 3、查看新加入的硬盘 4、创建主分区 5、创建物理卷 6、打包为一个卷组 7、创建逻辑卷 8、格式化逻辑卷 9、挂载逻辑卷--开机自…...

buuctf_练[安洵杯 2019]easy_web
[安洵杯 2019]easy_web 文章目录 [安洵杯 2019]easy_web掌握知识解题思路代码分析正式解题 关键paylaod 掌握知识 url地址和源代码的信息捕捉;图片和base64之间转换;base64和十六进制编码的了解;代码审计,绕过正则匹配对关键字的…...
入学生活科研随笔
近而立之年,巅峰享受的时期有两段。一是高考后,收到入学通知书。早晨,八点多,我醒来在院子里看到,爸爸在门口和邮政快递员寒暄。那天应该是8月15号,清晨凉凉爽爽的,杨树遮住了大半个院子。第二段…...

【1++的Linux】之进程间通信(共享内存)
👍作者主页:进击的1 🤩 专栏链接:【1的Linux】 我们在前面的文章中提到过,进程间的通信本质都是先看到同一块资源,然后通过这同一块资源进行通信,并且是单向的通信,只能一端发&#…...

Linux高性能服务器编程——ch8笔记
第8章 高性能服务器程序框架 8.1 服务器模型 服务器启动后,首先创建一个(或多个)监听socket,并调用bind函数将其绑定到服务器感兴趣的端口,然后调用listen函数等待客户连接。服务器稳定运行之后,客户端就可…...
Android WMS——ViewRootImpl分析(六)
一、简介 ViewRootImpl是View中的最高层级,属于所有View的根(但ViewRootImpl不是View,只是实现了ViewParent接口),维护了整个视图结构,并作为输入事件的分发器和绘图管道的输入端点,承担着输入事件分发、窗口管理、视图绘制和系统事件响应等关键角色。对于Android应用程…...

Unsatisfied dependency expressed through bean property ‘sqlSessionTemplate‘;
代码没有问题,但是启动运行报错 2023-10-25 16:59:38.165 INFO 228964 --- [ main] c.h.h.HailiaowenanApplication : Starting HailiaowenanApplication on ganluhua with PID 228964 (D:\ganluhua\code\java\hailiao-java\target\classes …...
【C++】智能指针:auto_ptr、unique_ptr、share_ptr、weak_ptr(技术介绍 + 代码实现)(待更新)
文章目录 0. 概述智能指针,智能在哪儿?RAII 的介绍四个智能指针的特点: 1. auto_ptr(C98)🐎核心功能的简单实现 2. unique_ptr(C11)🐎核心功能的简单实现 3. shared_ptr&…...

nodejs+vue全国公考岗位及报考人数分析
传统的搜索引擎尽管解决了信息搜索问题,但无法进行有效的数据分析和优质资源的获取。并且,人们的需求不同,数据的要求也不同。为了解决这一问题,定向抓取数据的爬虫诞生了。它的诞生把人们从重复性的劳动中解放出来,节…...

【0基础学Java第二课】数据类型与变量
2. 数据类型与变量 2.1 字面常量2.2 数据类型2.3 变量2.3.1 变量概念2.3.2 语法格式 2.4 整型变量2.4.1 整型变量2.4.2 长整型变量2.4.3 短整型变量2.4.4 字节型变量 2.5 浮点型变量2.6 字符型2.7 布尔型变量2.8 类型转换2.9 类型提升2.10 字符串类型2.10.1 字符串拼接操作符 2…...

Pytorch整体工作流程代码详解(新手入门)
一、前言 本文详细介绍Pytorch的基本工作流程及代码,以及如何在GPU上训练模型(如下图所示)包括数据准备、模型搭建、模型训练、评估及模型的保存和载入。 适用读者:有一定的Python和机器学习基础的深度学习/Pytorch初学者。 本文…...

读图数据库实战笔记02_图数据建模
1. 概念 1.1. 实体 1.1.1. 通常用名词来表示 1.1.2. 描述一个领域中的事物或者事物类型 1.1.2.1. 汽车 1.1.2.2. 用户 1.1.2.3. 地理位置 1.1.3. 在逻辑模型和技术实现过程中,实体通常会变成“顶点” 1.2. 关系 1.2.1. 用动词(或动词短语&#…...

竞赛 深度学习卫星遥感图像检测与识别 -opencv python 目标检测
文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

【入坑系列】TiDB 强制索引在不同库下不生效问题
文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...
JVM垃圾回收机制全解析
Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象,从而释放内存空间,避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

(二)原型模式
原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...