Vue 3 响应式对象:ref 和 reactive 的使用和区别

🎉🎉欢迎来到我的CSDN主页!🎉🎉
🏅我是尘缘,一个在CSDN分享笔记的博主。📚📚
👉点击这里,就可以查看我的主页啦!👇👇
尘缘的个人主页
🎁如果感觉还不错的话请给我点赞吧!🎁🎁
💖期待你的加入,一起学习,一起进步!💖💖

在这里插入图片描述

目录

  • 引言
  • 一、介绍
    • 1.1 Vue 3 简介
    • 1.2 响应式对象的重要性
    • 1.3 ref 和 reactive 的概述
  • 二、使用 ref
    • 2.1 ref 的创建方法
    • 2.2 ref 的使用方法
    • 2.3 ref 的适用场景
    • 2.4 ref 的局限性
  • 三、使用 reactive
    • 3.1 reactive 的创建方法
    • 3.2 reactive 的使用方法
    • 3.3 reactive 的适用场景
    • 3.4 reactive 的局限性
  • 四、对比 ref 和 reactive
    • 4.1 响应性方面的对比
    • 4.2 性能方面的对比
    • 4.3 使用场景的对比
    • 4.4 API 使用的对比
  • 五、总结

引言

Vue.js 是一个流行的 JavaScript 框架,它使得开发人员能够轻松地创建用户界面。在 Vue.js 中,响应式对象是非常重要的一部分,它们可以自动更新依赖它们的组件。在 Vue 3 中,有两种创建响应式对象的方法:使用 ref 和使用 reactive。这两种方法有一些区别,本文将详细介绍它们的区别以及使用方法。

一、介绍

1.1 Vue 3 简介

Vue 3 是 Vue.js 的最新版本,它带来了许多新的特性和改进,包括更好的性能、更简单的 API、更好的 TypeScript 支持等等。Vue 3 继续沿用了 Vue 2.x 的开发理念和模式,同时增加了一些新的概念和工具,使得开发者能够更高效地开发前端应用。

1.2 响应式对象的重要性

在 Vue.js 中,响应式对象是非常重要的一部分。当一个对象的属性被改变时,如果这个对象被用在 Vue 组件的模板中,那么这个组件会自动更新以反映新的属性值。这个特性使得开发者能够以声明式的方式构建用户界面,而不需要写很多的更新逻辑。

1.3 ref 和 reactive 的概述

在 Vue 3 中,有两种主要的方法来创建响应式对象:使用 ref 和使用 reactive。

ref 是 Vue 3 中用于创建响应式引用的函数。它返回一个包装过的对象,这个对象的值是可以改变的,但它的引用是不会改变的。这意味着你可以在模板中使用 ref,并且当它的值改变时,模板会自动更新。

reactive 是 Vue 3 中用于创建响应式对象的函数。它返回一个响应式对象,这个对象的属性和方法都可以改变。这意味着你可以在模板中使用 reactive,并且当它的属性或方法改变时,模板会自动更新。

二、使用 ref

2.1 ref 的创建方法

在 Vue 3 中,你可以使用 ref 函数来创建一个响应式引用。ref 函数可以接受一个初始值,并返回一个响应式对象。例如:

import { ref } from 'vue';  const count = ref(0);

在这个例子中,我们创建了一个名为 count 的响应式引用,它的初始值为 0。

2.2 ref 的使用方法

使用 ref 的一个关键点是,你不能直接修改它的值。要修改 ref 的值,你需要使用 .value 属性。例如:

count.value++; // 修改 count 的值

你还可以通过 .get 方法来获取 ref 的当前值。例如:

console.log(count.get()); // 输出 0

2.3 ref 的适用场景

ref 最适合用于那些值需要改变,但引用不会改变的场景。例如,如果你有一个对象,而这个对象的某个属性是响应式的,那么你可以使用 ref 来创建这个属性。

2.4 ref 的局限性

ref 的一个局限性是,它只能用于原始数据类型(如字符串、数字、布尔值等),不能用于对象或数组。这意味着如果你需要创建一个包含多个属性的响应式对象,你需要使用 reactive 函数而不是 ref

三、使用 reactive

3.1 reactive 的创建方法

在 Vue 3 中,你可以使用 reactive 函数来创建一个响应式对象。reactive 函数可以接受一个初始对象作为参数,并返回一个响应式对象。例如:

import { reactive } from 'vue';  const state = reactive({  count: 0,  name: 'John',  
});

在这个例子中,我们创建了一个名为 state 的响应式对象,它包含两个属性 countname

3.2 reactive 的使用方法

使用 reactive 的一个关键点是,你可以直接修改它的属性。例如:

state.count++; // 修改 state 的 count 属性  
state.name = 'Jane'; // 修改 state 的 name 属性

你还可以通过 reactive 函数创建一个响应式的方法或计算属性。例如:

const doubleCount = reactive({  get() {  return this.count * 2;  },  
});

在这个例子中,我们创建了一个名为 doubleCount 的响应式方法,它返回 count 的两倍。当你访问 doubleCount 时,它会动态地计算它的值。

3.3 reactive 的适用场景

reactive 函数最适合用于创建包含多个属性的响应式对象。由于 reactive 返回的是一个响应式对象,因此你可以直接修改它的属性,而不需要使用 .value 属性。

reactive 还可以用于创建包含方法或计算属性的响应式对象。你可以在响应式对象中定义方法或计算属性,并在模板中直接调用它们。这种方法在处理复杂的数据逻辑时非常有用。

reactive 也适用于那些需要同时跟踪多个状态的情况。通过使用 reactive,你可以将多个状态组织在一个响应式对象中,并在模板中方便地访问它们。

3.4 reactive 的局限性

虽然 reactive 提供了更广泛的响应式对象功能,但它确实有一些局限性。首先,与 ref 相比,reactive 的性能开销可能更大。因为 reactive 需要跟踪对象中的所有属性变化,而 ref 只需要跟踪一个原始值的变化。在性能敏感的应用程序中,使用 ref 可能是一个更好的选择。

其次,reactive 不支持 .set 方法。这意味着如果你想设置一个响应式对象的属性值,你只能直接赋值。这可能会引发一些不便。另外,如果你需要在响应式对象上添加一些额外的逻辑(例如 getter 或 setter),你可能需要使用 computed 或其他方法来实现,而不是直接在 reactive 中定义。

四、对比 ref 和 reactive

4.1 响应性方面的对比

refreactive 都可以创建响应式对象,但是在响应性方面,它们有一些区别。

使用 ref 创建的响应式引用只会响应原始值的改变。如果你将一个对象或者数组作为 ref 的初始值,那么当这个对象或数组中的某个元素发生改变时,ref 不会响应。只有当整个对象或数组被替换为新的对象或数组时,ref 才会响应。

相比之下,reactive 可以创建包含多个属性的响应式对象。当这些属性发生改变时,reactive 会立即响应并更新相关的组件。此外,reactive 还可以创建响应式的方法和计算属性,这是 ref 不支持的。

ref 更适合用于单个值的响应式引用,而 reactive 更适合用于包含多个属性或方法的响应式对象。

4.2 性能方面的对比

由于 ref 只关注单个原始值的改变,因此它的性能开销相对较小。相比之下,reactive 需要跟踪对象中的所有属性变化,因此它的性能开销可能更大。特别是在处理大量数据或复杂逻辑时,reactive 的性能开销可能会更加明显。

然而,需要注意的是,这种性能差异在很多情况下可能并不显著。对于大多数应用程序来说,refreactive 的性能差异不会对应用程序的整体性能产生太大影响。只有在处理非常大量的数据或进行高频率的更新时,这种性能差异才会变得明显。

因此,在选择使用 refreactive 时,需要根据具体的应用场景和需求进行权衡。如果需要处理大量数据或复杂逻辑,并且需要立即响应用户的输入或状态的改变,那么使用 reactive 可能更合适。如果只需要处理单个值的改变,并且对性能要求较高,那么使用 ref 可能更合适。

4.3 使用场景的对比

ref 更适合用于简单的数据引用,例如单个的数字、字符串或布尔值。当你需要响应这些简单数据的改变时,可以使用 ref。例如,如果你有一个表单,其中包含一些输入字段,你可以使用 ref 来存储和响应每个输入字段的值。

相比之下,reactive 更适合用于复杂的数据结构,例如对象或数组。当你需要同时处理多个属性的改变时,或者当你需要创建包含方法或计算属性的响应式对象时,可以使用 reactive。例如,如果你有一个购物车,其中包含多个商品,每个商品都有自己的数量和价格,你可以使用 reactive 来存储和响应整个购物车。

ref 更适合用于简单的数据引用,而 reactive 更适合用于复杂的数据结构。

4.4 API 使用的对比

ref 的 API 相对简单,只需要调用一次函数即可创建响应式引用。例如:

const count = ref(0);

reactive 需要调用两次函数,先创建一个普通的对象,然后再使用 reactive 包装它。例如:

const state = reactive({ count: 0 });

这意味着 reactive 的 API 使用可能更加繁琐一些。此外,reactive 还提供了更多的功能和选项,例如可以创建响应式的方法和计算属性。但是这也会增加学习的难度和复杂性。

ref 的 API 使用更加简单直接,而 reactive 的功能更加强大但学习难度也相对较大。选择使用哪个功能取决于具体的应用场景和个人需求。

五、总结

Vue 3 的 ref 和 reactive 是创建响应式对象的两种方法。ref 创建响应式引用,只能应用于单个原始值的情况。reactive 创建响应式对象,适用于包含多个属性或方法的复杂数据结构。ref 的 API 简单直接,而 reactive 提供了更多功能和选项。根据具体应用场景和个人需求选择使用哪种方法。

在这里插入图片描述

到这里我的分享就结束了,欢迎到评论区探讨交流!!
💖如果觉得有用的话还请点个赞吧 💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/123851.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】吴恩达课程笔记(二)——浅层神经网络、深层神经网络

笔记为自我总结整理的学习笔记,若有错误欢迎指出哟~ 笔记链接 【深度学习】吴恩达课程笔记(一)——深度学习概论、神经网络基础 吴恩达课程笔记——浅层神经网络、深层神经网络 四、浅层神经网络1.双层神经网络表示2.双层神经网络的前向传播第一层前向传播第二层前…

Java进阶(Set)——面试时Set常见问题解读 结合源码分析

前言 List、Set、HashMap作为Java中常用的集合,需要深入认识其原理和特性。 本篇博客介绍常见的关于Java中Set集合的面试问题,结合源码分析题目背后的知识点。 关于List的博客文章如下: Java进阶(List)——面试时L…

mac电脑怎么永久性彻底删除文件?

Mac老用户都知道在我们查看Mac内存时都会发现有一条“其他文件”占比非常高,它是Mac储存空间中的“其他”数据包含不可移除的移动资源,如,Siri 语音、字体、词典、钥匙串和 CloudKit 数据库、系统无法删除缓存的文件等。这些“其他文件”无用…

frp-内网穿透部署-ubuntu22服务器-windows server-详细教程

文章目录 1.下载frp2.配置服务器2.1.配置frps.ini文件2.2.设置服务文件2.3.设置开机自启和服务操作2.4.后台验证2.5.服务器重启 3.配置本地window3.1.frpc配置3.2.添加开机计划启动3.3.控制台启动隐藏窗口 4.centos防火墙和端口3.1.开放端口3.2.查看端口 5.关闭进程5.1.杀死进程…

Elasticsearch:标量量化 101 - scalar quantization 101

作者:BENJAMIN TRENT 什么是标量量化以及它是如何工作的? 大多数嵌入模型输出 float32 向量值。 虽然这提供了最高的保真度,但考虑到向量中实际重要的信息,这是浪费的。 在给定的数据集中,嵌入永远不需要每个单独维度…

一体化模型图像去雨+图像去噪+图像去模糊(图像处理-图像复原-代码+部署运行教程)

本文主要讲述了一体化模型进行去噪、去雨、去模糊,也就是说,一个模型就可以完成上述三个任务。实现了良好的图像复原功能! 先来看一下美女复原.jpg 具体的: 在图像恢复任务中,需要在恢复图像的过程中保持空间细节…

vue使用百度富文本

🔥博客主页: 破浪前进 🔖系列专栏: Vue、React、PHP ❤️感谢大家点赞👍收藏⭐评论✍️ 1、下载UEditor 链接已放到文章中了 2、上传到项目目录中 一般上传到public下,方便到时候打包进去,以免…

Ubuntu学习---跟着绍发学linux课程记录(第4部分)

第3部份内容记录在:Ubuntu学习—跟着绍发学linux课程记录(第3部分) 文章目录 14 ubuntu服务器上的java14.1 Java的安装14.2 运行java程序14.3 Java启动脚本 15 ubuntu服务器上的tomcat15.1 Tomcat服务器15.2 Tomcat的配置15.3 Tomcat启动日志…

加速度中标云尖信息「电子元器件商城」开发项目——加速度jsudo

深圳市加速度软件开发有限公司在电子元器件和工业品行业有着多年得商城开发经验,服务过半导体、元器件、工业品行业的多家上市公司或实力工厂。选择加速度合作的60%的客户,或多或少都有踩坑的经历,这一次他们在选择商城开发商的时候格外谨慎&…

Spring@Lazy是如何解决构造函数循环依赖问题

Spring实例化源码解析之循环依赖CircularReference这章的最后我们提了一个构造函数形成的循环依赖问题,本章就是讲解利用Lazy注解如何解决构造函数循环依赖和其原理。 准备工作 首先创建两个构造函数循环依赖的类,TestA和TestB,代码如下&am…

qt-C++笔记之在两个标签页中按行读取两个不同的文件并且滚动条自适应滚动范围高度

qt-C笔记之在两个标签页中按行读取两个不同的文件并且滚动条自适应滚动范围高度 code review! 文章目录 qt-C笔记之在两个标签页中按行读取两个不同的文件并且滚动条自适应滚动范围高度1.运行2.文件结构3.main.cc4.main.pro5.a.txt6.b.txt7.上述代码中QVBoxLayout&#xff0c…

世界前沿技术发展报告2023《世界航空技术发展报告》(四)无人机技术

(四)无人机技术 1.无人作战飞机1.1 美国空军披露可与下一代战斗机编组作战的协同式无人作战飞机项目1.2 俄罗斯无人作战飞机取得重要进展 2.支援保障无人机2.1 欧洲无人机项目通过首个里程碑2.2 美国海军继续开展MQ-25无人加油机测试工作 3.微小型无人机…

TextureView和SurfaceView

1、Surface Surface对应了一块屏幕的缓冲区,每一个window对应一个Surface,任何View都是画在Surface上的,传统的View共享一块屏幕缓冲区,所有的绘制都必须在UI线程上进行。 2、SurfaceView 顾名思义就是Surface的View,…

NSS刷题 js前端修改 os.path.join漏洞

打算刷一遍nssweb题(任重道远) 前面很简单 都是签到题 这里主要记录一下没想到的题目 [GDOUCTF 2023]hate eat snake 这里 是对js的处理 有弹窗 说明可能存在 alert 我们去看看js 这里进行了判断 如果 getScore>-0x1e9* 我们结合上面 我觉得是6…

RabbitMQ基础

目录 RabbitMQ的可靠性投递 确保消息正确地发送至 RabbitMQ 确保消息接收方消费了消息 流程分析 1.生产者发送消息给Broker 2.交换机路由消息到队列 3.消息存储在队列 4.消费者订阅并消费消息 三个重要概念 RabbitMQ集群模式 RabbitMQ的可靠性投递 在 RabbitMQ 中&a…

BUUCTF qr 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 这是一个二维码,谁用谁知道! 密文: 下载附件,得到一张二维码图片。 解题思路: 1、这是一道签到题,扫描二维码得到flag。 flag:…

一文了解Elasticsearch

数据分类 数据按数据结构分类主要有三种:结构化数据、半结构化数据和非结构化数据。 结构化数据 结构化数据具有明确定义数据模型和格式的数据类型。 特点: 数据具有固定的结构和模式。 数据项明确定义数据类型和长度。 适合用于数据查询、过滤和分…

【C++的OpenCV】第十四课-OpenCV基础强化(三):Mat元素的访问之data和step属性

🎉🎉🎉 欢迎来到小白 p i a o 的学习空间! \color{red}{欢迎来到小白piao的学习空间!} 欢迎来到小白piao的学习空间!🎉🎉🎉 💖 C\Python所有的入门技术皆在 我…

【年终特惠】基于最新导则下生态环评报告编制技术暨报告篇、制图篇、指数篇、综合应用篇系统性实践技能提升

根据生态环评内容庞杂、综合性强的特点,依据生态环评最新导则,将内容分为4大篇章(报告篇、制图篇、指数篇、综合篇)、10大专题(生态环评报告编制、土地利用图的制作、植被类型及植被覆盖度图的制作、物种适宜生境分布图的制作、生物多样性测定、生物量及…

前端Vue页面中如何展示本地图片

<el-table :data"tableData" stripe style"width: 100%"><el-table-column prop"imgUrl" label"图片"><template v-slot"scope"><img :src "http://localhost:8888/image/ scope.row.imgUrl&qu…