【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…

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这个插件,这是一款简单好用的一个数字滚动插件,…

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

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

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

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

LAMMPS - 分子动力学模拟器

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

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

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

【mysql数据库】mycat中间件

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

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

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

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…

基于Chisel语言的FPGA流水灯程序

目录 一、 内容概要二、 Chisel介绍三、 Chisel的使用四、 流水灯实现五、 心得体会六、 参考链接 一、 内容概要 Chisel介绍Chisel使用流程Chisel流水灯实操 二、 Chisel介绍 Chisel 是一种构建硬件描述语言&#xff08;HDL&#xff09;的高级编程语言&#xff0c;它允许硬…

指纹浏览器大全

具体请前往&#xff1a;国内外指纹浏览器大全

师彼长技以助己(2)产品思维

师彼长技以助己&#xff08;2&#xff09;产品思维 前言 我把产品思维称之为&#xff1a;人生底层的能力以及蹉跎别人还蹉跎自己的能力&#xff0c;前者说明你应该具备良好产品思维原因&#xff0c;后者是你没有好的产品思维去做产品带来的灾难。 人欲即天理 请大家谈谈看到这…

c++车票管理系统

这里写自定义目录标题 c车票管理系统vx:sredxc车票管理系统初始页面,需要源码vx:sredxc新增车票信息查询车票信息代码包含完整的发布车票信息,购票,退票,票数检测,余票检测,车票查询等功能 c车票管理系统vx:sredxc 这段代码实现了一个简单的高铁票务管理系统&#xff0c;具有以…

Threejs(WebGL)绘制线段优化:Shader修改gl.LINES模式为gl.LINE_STRIP

目录 背景 思路 Threejs实现 记录每条线的点数 封装原始裁剪索引数据 封装合并几何体的缓冲数据&#xff1a;由裁剪索引组成的 IntArray 守住该有的线段&#xff01; 修改顶点着色器 修改片元着色器 完整代码 WebGL实现类似功能&#xff08;简易版&#xff0c;便于测…

接入knife4j-openapi3访问/doc.html页面空白问题

大概率拦截器拦截下来了&#xff0c;我们F12看网络请求进行排查 都是 /webjars/ 路径下的资源被拦截了&#xff0c;只需在拦截器中添加该白名单即可"/webjars/**" 具体配置如下&#xff1a; Configuration public class WebConfig implements WebMvcConfigurer {priv…

eDP V1.4协议介绍

一、说明 eDP的全称是Embedded DisplayPort嵌入式显示端口,主要应用与短距离系统内应用,例如手机、一体式台式机等。eDP V1.4b是基于DP V1.3标准制作完成,但因应用场景的不同,还是有很多区别。 电压摆幅不同,eDP相对较低; eDP功耗相对较低; DP有线材和连接器的要求,eD…

什么是机器人离线编程? 衡祖仿真

一、什么是机器人离线编程&#xff1f; 机器人离线编程是自动化生产的重要一环。离线编程指&#xff0c;在建立了机器人的三维模拟场景后&#xff0c;经由软件仿真计算&#xff0c;生成控制机器人运动轨迹&#xff0c;进而生成机器人的控制指令。工程师可以由此来控制物理环境…