【vue3|第5期】Vue3响应式数据:ref 与 reactive 的深入解析

日期:2024年5月31日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006


文章目录

  • 一、前言
  • 二、ref
    • (2-1)特性
    • (2-2)使用场景
  • 三、reactive
    • (3-1)特性
    • (3-2)使用场景
  • 四、ref 与 reactive 的区别与联系
  • (4-1)区别
  • (4-2)联系
  • 五、总结


在这里插入图片描述


一、前言

Vue3 中,响应式数据是构建动态 UI 的基石。Vue3 引入了 组合式API(即 Composition API),并提供了 refreactive 两个函数来创建响应式数据。本文将详细介绍 refreactive 的使用方法、适用场景、区别以及它们之间的联系。

二、ref

refVue3 中用于创建响应式引用(reference)的函数。它返回一个具有 value 属性的对象,该属性是响应式的。可以通过 .value 来访问或修改这个值。

import { ref } from 'vue';const count = ref(0); // 创建一个响应式引用,初始值为 0console.log(count.value); // 输出:0count.value++; // 修改引用的值
console.log(count.value); // 输出:1

(2-1)特性

  • ref 主要用于创建基本类型(如 numberstringboolean 等)的响应式数据。
  • ref 返回的是一个对象,而不是如数字、字符串等,因此你需要通过 .value 来访问或修改它的值。
  • 在模板中,Vue 会自动解包 ref 的值,所以你不需要写 .value

(2-2)使用场景

  • 当你需要一个单独的响应式值时,比如一个计数器或者一个表单输入字段的值。
  • Composition API 中,ref 是一个非常常见的选择,因为它可以与 setup 函数中的其他逻辑很好地组合。

三、reactive

reactive 函数用于创建复杂数据结构(如对象、数组等)的响应式对象。,该对象的属性都是响应式的。

import { reactive } from 'vue';const state = reactive({count: 0,name: 'Vue 3'
});console.log(state.count); // 输出:0
console.log(state.name); // 输出:'Vue 3'state.count++; // 修改对象的属性值
console.log(state.count); // 输出:1

(3-1)特性

  • reactive 主要用于创建复杂类型(如对象、数组等)的响应式数据
  • 返回的对象本身就是响应式的,你可以直接访问或修改它的属性。
  • 在模板中,你可以像访问普通对象属性一样访问 reactive 对象的属性。

(3-2)使用场景

  • 当你需要一个具有多个响应式属性的对象时,比如一个包含多个状态或属性的组件状态。
  • Options API 中,你可能已经习惯了使用 data 函数返回对象来管理状态,而 reactive 可以看作是这种模式的扩展,用于 Composition API

四、ref 与 reactive 的区别与联系

(4-1)区别

内容refreactive
用途主要用于创建基本类型的响应式数据用于创建复杂类型的响应式数据。
返回值一个具有 value 属性的对象直接返回响应式对象
模板使用自动解包 ref 的值对象属性则可以直接访问
内部实现创建一个具有单个 .value 属性的响应式对象通过使用 ES6Proxy 对象来创建一个代理,该代理可以拦截对象的所有操作。
性能考量一般情况,性能更优对象的每个属性需要进行递归转换

(4-2)联系

  • 响应式原理:两者都基于 Vue3 的响应式系统,当数据发生变化时,视图会自动更新。
  • 组合使用:在实际开发中,可以根据需要组合使用 refreactive。例如,可以在 reactive 对象的属性中使用 ref
  • 互操作性:Vue 3 提供了 toRefs 和 toRef 函数,允许我们将 reactive 对象转换为 ref,反之亦然,这增加了两者之间的互操作性。

五、总结

refreactiveVue3 中创建响应式数据的两个重要函数。它们各有特点,适用于不同的场景。通过深入理解它们的用法和区别,可以更加灵活地构建 Vue3 应用程序的响应式数据层


参考文章:

  • Vue.js

版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/139349923

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

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

相关文章

vue3 前端实现导出下载pdf文件

这样的数据实现导出 yourArrayBufferOrByteArray 就是后端返回数据 // 创建Blob对象const blob new Blob([yourArrayBufferOrByteArray], { type: application/pdf });// 创建一个表示该Blob的URLconst url URL.createObjectURL(blob);// 创建一个a标签用于下载const a doc…

前端 JS 经典:闭包与内存泄漏、垃圾回收

1. 闭包 函数嵌套函数,内部函数可以引用外部函数的参数和变量。参数和变量不会被垃圾回收机制收回。 2. 垃圾回收机制 什么是垃圾?就是不再需要的内存。什么是垃圾回收机制?就是浏览器会自动回收掉我们不要的数据。那浏览器怎么判断什么是…

Redis常用命令大全

目录 1、五大数据类型的基本命令 1.1 字符串 1.2 列表 1.3 哈希 1.4 集合 1.5 有序集合 2、与key相关 2.1 查看redis数据的类型 2.2 查看当前redis库中的所有key命令 3、除了五大数据类型外常见命令 3.1 键操作 3.2 服务器操作 3.3 连接操作 3.4 发布/订阅 3.5 事…

大模型时代的具身智能系列专题(六)

UCSD 王小龙组 王小龙是UCSD电子与计算机工程系的助理教授。他曾在加州大学伯克利分校与Alexei Efros和Trevor Darrell一起担任博士后研究员,在CMU RI获得了机器人学博士学位,师从Abhinav Gupta。他的研究重点是通过视频和物理机器人交互数据来学习3D和…

Vue 2.0使用Vue-count-to给数字添加增长动画

在开发后台管理系统时,时常会遇到数据汇总,为了页面展示更生动,用户体验更好,通常会对汇总的数字加一个逐步递增动画。 实现这个效果一般是用的 Vue-count-to这个插件,这是一款简单好用的一个数字滚动插件,…

HTML5 视频 Vedio 标签详解

HTML5 引入了 <video> 标签&#xff0c;允许开发者在网页中直接嵌入视频文件&#xff0c;而不需要依赖第三方插件。本文将全面介绍 <video> 标签的各种属性&#xff0c;并通过实例代码详细说明其用法。 一、基础用法 1. 基本结构 HTML5 中使用 <video> 标…

达梦数据库修改兼容模式设置

达梦数据库兼容模式设置及服务管理操作手册 1. 查询兼容模式 在达梦数据库中&#xff0c;可以通过以下 SQL 查询当前兼容模式&#xff1a; SELECT para_name, para_value FROM v$dm_ini WHERE para_name COMPATIBLE_MODE;2. 设置兼容模式 使用 sp_set_para_value 函数设置…

如何申请微信支付0.2%-0.3%的手续费优惠? 详细步骤

随着微信支付在日常交易中的普及&#xff0c;许多商家开始关注如何降低支付手续费的问题。近期&#xff0c;微信支付推出了一项新的费率优惠政策&#xff0c;允许商家享受0.2%-0.3%的费率优惠。这一政策无疑为商家带来了实质性的成本节约。那么&#xff0c;商家如何申请这一费率…

Oracle RAC 集群配置共享目录ACFS

Oracle RAC 集群配置共享目录ACFS 应用场景&#xff1a;创建的ACFS文件系统用于部署OGG做数据同步使用。 1、创建共享磁盘组 create diskgroup OGG external redundancy disk /dev/mapper/ASM08, /dev/mapper/ASM09; 2、创建 acfs 文件系统 ACFS文件系统 在ASM磁盘组中通过A…

开源还是闭源这是一个问题

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

线性数据结构-数组

数组&#xff1a;线性数据结构&#xff08;一维数组结构&#xff09; 线性的数据结构强调存储和顺序 数组在内存存储空间上是连续的&#xff0c;并且长度固定不可变更 数组扩容 因为数组定长&#xff0c;当想往长度为8的数组中添加第九个元素时&#xff0c;操作系统会开辟一段…

如何在 c++ 里,让子类访问到父类的私有数据成员?答案之一:使用第三方友元类或友元函数

看 STL 库的代码时候&#xff0c;见有这种写法&#xff0c;感觉挺神奇的。故简化逻辑后&#xff0c;写个玩具验证一下。本来这是很别扭的做法。既然父类让数据成员私有了&#xff0c;还要让子类去调用&#xff0c;何苦呢&#xff1f;但看大师们的写法&#xff0c;果然 c 编译器…

LAMMPS - 分子动力学模拟器

本文翻译自&#xff1a;https://www.lammps.org/ 文章目录 一、关于 LAMMPS下载作者R&D 100 二、LAMMPS 亮点毛细血管中的血流 一、关于 LAMMPS 官网&#xff1a; https://www.lammps.org/ github &#xff1a;https://github.com/lammps/lammps LAMMPS 分子动力学模拟器…

上位机图像处理和嵌入式模块部署(f103 mcu定时器配置)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 在mcu开发过程当中&#xff0c;有一种开发模式用的比较多&#xff0c;那就是中断while&#xff08;1&#xff09;。这里面的中断&#xff0c;又是以…

【mysql数据库】mycat中间件

MyCat 简介 Mycat 是数据库 中间件 。 1、 数据库中间件 中间件 是一类连接软件组件和应用的计算机软件&#xff0c; 以便于软件各部件之间的沟通 。 例子 Tomcat web 中间件 。 数据库 中间件 连接 java 应用程序和数据库 2、 为什么要用 Mycat ① Java 与数据库紧耦合 …

关于各种儿童竞赛的小讨论

大家好&#xff0c;我是阿赵。   在过去的一个周末&#xff0c;连续两天&#xff0c;我儿子都代表学校参加了小学组的竞赛&#xff0c;分别是GoC编程竞赛和小小科学家的化学竞赛。   我儿子今年4年级&#xff0c;在这读小学的4年里面&#xff0c;他加入过很多所谓的“校队”…

【Linux】操作系统之冯诺依曼体系

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; Linux &#x1f389;其它专栏&#xff1a; C初阶 | C进阶 | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解 操作系统中 冯诺依曼体系 的相关内容。 如果看到最后您觉得这篇文…

数据仓库应该用什么方案——数据仓库实施方案概述

数据仓库的设计和实施是一个复杂的过程&#xff0c;通常需要根据具体的企业需求和资源来确定最佳的方案。以下是一个详细的数据仓库实施方案概述&#xff0c;但请注意&#xff0c;由于数据仓库的具体实现细节可能因技术栈、业务需求和数据源的不同而有所变化&#xff0c;因此我…

jsp实验19 File

三、源代码以及执行结果截图&#xff1a; readJSPFile.jsp <% page contentType"text/html" %> <% page pageEncoding "utf-8" %> <% page import"java.io.*"%> <style> #tom{ font-family:宋体;font-size:2…