【Vue3】toRefs和toRef在reactive中的一些应用

news2024/11/15 12:08:15

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢迎在文章下方留下你的评论和反馈。我期待着与你分享知识、互相学习和建立一个积极的社区。谢谢你的光临,让我们一起踏上这个知识之旅!
请添加图片描述

文章目录

  • 🍀回顾响应式对象
  • 🍀介绍toRefs
  • 🍀介绍toRef(不常用)
  • 🍀总结

🍀回顾响应式对象

在介绍知识点之前,我们准备好初始代码

<template>
<h2>姓名:{{ person.name }}</h2>
<h2>姓名:{{ person.age }}</h2>
<button @click="change_name">修改名字</button>
<button @click="change_age"></button>
 </template>
 
 <script lang="ts" setup name="Person11">
  import {reactive} from 'vue'
  
 let person = reactive({
  name:'馒头',
  age:22
 })
 function change_name(){
  person.name += '*'
 }

 function change_age(){
  person.age += 1
 }

 </script>
 
 <style scoped>
   .person {
     background-color: skyblue;
     box-shadow: 0 0 10px;
     border-radius: 10px;
     padding: 20px;
   }
   button {
     margin: 0 5px;
   }
 </style>

运行结果如下请添加图片描述

是否和你想的一样呢,我们使用了reactive进行创建响应式对象

接下来我们对person进行解构赋值

或许有些人不太理解解构赋值,我从网上找了一段话

解构赋值是 JavaScript 中一种方便的语法,用于从数组或对象中提取数据并赋值给变量。通过解构赋值,可以轻松地提取数组中的元素或对象中的属性,使代码更简洁易读。它还可以嵌套使用,处理复杂的数据结构,但要注意避免过度解构,以保持代码的可读性。

接下来我们看看代码中如何操作,只需在数据下面加一行

let {name,age} = person

接下来我们修改方法中的部分代码

//原代码
function change_name(){
          person.name += '*'
        }

        function change_age(){
          person.age += 1
        }
//修改之后的代码
function change_name(){
          name += '*'
        }

        function change_age(){
          age += 1
        }

这样我们的页面是否还会响应呢,答案是不可以
请添加图片描述
如果我们再修改模板里面的内容呢

<h2>姓名:{{ name }}</h2>
<h2>姓名:{{ age }}</h2>

答案也是不更新的,但是数据究竟改没改呢,我们打印一下

function change_name(){
          name += '*'
          console.log(name)
        }

        function change_age(){
          age += 1
          console.log(age)
        }

控制台结果显示如下,所以说是改了的
在这里插入图片描述


接下来我们解释一下
let {name,age} = person
上面这行代码和下面两行代码其实是等价的
let name=person.name
let age=person.age
同时我们要明确一点,下图的数据是响应式的
在这里插入图片描述

但是我们解构后相当于自己重新定义了一个对象name和age,然后person.name和person.age是不变的
多说无益,我们测试一下叭

function change_name(){
          name += '*'
          console.log(name, person.name)
        }

在这里插入图片描述
结果显然了叭,结论就是:响应式对象解构出的并非是响应式对象


🍀介绍toRefs

承接上个标题,我们如果想要将解构的对象变为响应式的,我们应该怎么做呢,只需要import一个toRefs

import {reactive,toRefs} from 'vue'

同时我们再将解构的person包裹一下toRefs

let {name,age} = toRefs(person)

这样的意思就是,将解构的数据变为Ref定义的响应式对象,将reactive对象变为Ref对象
接下来我们改一下方法

function change_name(){
          name.value += '*'
          console.log(name, person.name)
        }

        function change_age(){
          age.value += 1
          console.log(age)
        }

这样我们再测试一下
请添加图片描述


🍀介绍toRef(不常用)

toRef和toRefs是 Vue3 中用于处理响应式对象的两个函数,它们有一些重要的区别

toRef:
    参数:接收一个响应式对象和一个属性名,返回一个 ref 对象,指向该属性的值。
    用途:主要用于将单个属性转换为 ref 对象,使得该属性的值能够被响应式地跟踪。
    示例:

toRefs:

参数:接收一个响应式对象,返回一个包含该对象所有属性的 ref 对象。
用途:常用于在组件中将 props 转换为响应式对象,或者在 setup 函数中处理响应式对象的多个属性。
示例:

总的来说,toRef用于处理单个属性,将其转换为 ref 对象,而toRefs用于处理整个对象,将对象的所有属性都转换为 ref 对象


🍀总结

本节介绍了一下toRefs和toRef,同时回忆了一下reactive

请添加图片描述

挑战与创造都是很痛苦的,但是很充实。

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

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

相关文章

如何在debian上实现一键恢复操作系统?

在Debian或任何其他Linux发行版上实现一键恢复操作系统&#xff0c;需要创建一个系统镜像或快照&#xff0c;并设置一个简单的方法来从该镜像恢复。以下是创建和恢复系统的基本步骤&#xff1a; 1. 创建系统镜像&#xff1a; 使用像dd&#xff0c;rsync或专门的备份工具&#…

详细分析UML的10种图(全)

目录 前言1. 基本知识2. 结构图2.1 类图2.2 对象图2.3 组件图2.4 部署图2.5 包图 3. 行为图3.1 用例图3.2 活动图3.3 状态图 4. 行为图4.1 顺序图4.2 协作图 前言 在软考高级中常见的一种题型&#xff0c;对此补充这方面的知识&#xff0c;并将其归入软考的专栏 1. 基本知识 …

全网最最最详细DataEase源码Docker方式部署教程

1.源码获取 有条件的小伙伴可以使用GitHub方式获取&#xff0c;要是没有条件的小伙伴可以去码云上面获取也是一样的&#xff0c;或者可以联系博主&#xff0c;博主手把手教学~ GitHub地址 Gitee地址 2.配置源码信息 1.配置单机版的配置文件中的数据库信息 2.下载前端的依赖包…

顺序表经典算法及其相关思考

27. 移除元素 - 力扣&#xff08;LeetCode&#xff09; 思路一 利用顺序表中的SLDestroy函数的思想&#xff0c;遇到等于val值的就挪动 思路二 双指针法&#xff1a;不停的将和val不相等的数字往前放。此时的des更像一个空数组&#xff0c;里面存放的都是和val不相等、能够存…

java面试JVM虚拟机篇

1 JVM组成 1.1 JVM由那些部分组成&#xff0c;运行流程是什么&#xff1f; 难易程度&#xff1a;☆☆☆ 出现频率&#xff1a;☆☆☆☆ JVM是什么 Java Virtual Machine Java程序的运行环境&#xff08;java二进制字节码的运行环境&#xff09; 好处&#xff1a; 一次编写&a…

常见消息中间件

ActiveMQ 我们先看ActiveMQ。其实一般早些的项目需要引入消息中间件&#xff0c;都是使用的这个MQ&#xff0c;但是现在用的确实不多了&#xff0c;说白了就是有些过时了。我们去它的官网看一看&#xff0c;你会发现官网已经不活跃了&#xff0c;好久才会更新一次。 它的单机吞…

Unity Meta XR SDK 快捷配置开发工具【Building Block/Quick Action/OVRCameraRigInteraction】

文章目录 &#x1f4d5;教程说明&#x1f4d5;Building Block&#x1f4d5;Quick Action&#x1f4d5;OVRCameraRigInteraction 此教程相关的详细教案&#xff0c;文档&#xff0c;思维导图和工程文件会放入 Spatial XR 社区。这是一个高质量 XR 社区&#xff0c;博主目前在内…

redis在go语言中的使用

redis在go语言中的使用 以下说明以读者有redis基础的前提下进行 未学习redis的可以到b站1小时浅学redis了解大概&#xff0c;学会如何使用 【GeekHour】一小时Redis教程_哔哩哔哩_bilibili 以下开发环境以windows为测试环境&#xff0c;旨在练习redis在go语言中的使用 red…

Java 面向对象进阶 14 抽象类和抽象方法(黑马)

抽象类不能实例化&#xff08;创建对象&#xff09;&#xff1a; 抽象类中不一定有抽象方法&#xff1a; 有抽象方法的类一定是抽象类&#xff1a; 可以有构造方法&#xff1a;&#xff08;作用&#xff1a;在创建子类对象时&#xff0c;给属性进行赋值的&#xff09; Perso…

Springboot展示本地图片

1. 创建本地图片目录 在resources下创建目录static/image 2. 修改配置文件 在application.yml中新增 spring:mvc:static-path-pattern: /** 3. 编写拦截器类&#xff0c;继承自HandlerInterceptor 重写preHandle方法 public boolean preHandle(HttpServletRequest request…

Uniapp真机调试没有检测到设备,请插入设备或启动模拟器后刷新再试

最近用HbuilderX开发遇到了一个问题&#xff0c;之前插上手机就能调试&#xff0c;但最近再写app的时候&#xff0c;插上手机&#xff0c;也打开了开发者模式&#xff0c;但就是检测不到设备。 后来发现是要打开MIDI模式。vivo手机路径为&#xff1a;系统管理与升级->开发者…

RK3568平台开发系列讲解(Linux系统篇)编写I2C客户端驱动程序

🚀返回专栏总目录 文章目录 一、定义和注册I2C驱动程序二、在设备树中实例化I2C设备——新方法三、总结沉淀、分享、成长,让自己和他人都能有所收获!😄 配置I2C设备基本上分为两个步骤。 定义并注册I2C驱动程序定义并注册I2C设备在DT中,I2C设备属于非存储器映射设备系列…

HQYJ 2024-2-21 作业

复习课上内容&#xff08;已完成&#xff09;结构体字节对齐&#xff0c;64位没做完的做完&#xff0c;32位重新都做一遍&#xff0c;课上指定2字节对齐的做一遍&#xff0c;自己验证&#xff08;已完成&#xff09;两种验证大小端对齐的代码写一遍复习指针内容&#xff08;已完…

人脸美型SDK解决方案,包括瘦脸、大眼、瘦鼻等功能

为了满足市场不断升级的美颜需求&#xff0c;美摄科技凭借其在人脸识别与图像处理领域的深厚积累&#xff0c;推出了一款高效且易集成的人脸美型SDK解决方案。该方案旨在通过先进的算法和丰富的调节功能&#xff0c;帮助企业客户快速实现用户脸部形状的精准美化&#xff0c;进而…

MFC 多文档程序的基本编程

下载了一个openGL mfc的多文档程序,以此来学习mfc多文档模式的编程; 它每次新建一个文档,会在窗口绘制一个三角形、一个矩形;如果没有了图形刷新一下; 先看一下为什么每次打开新文档会绘制图形; 生成工程之后主要有5个类,比单文档程序多了一个子框架类; 可以打开多个…

微信小程序开发学习笔记——3.2page内的onload及data差值表达式

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 课程连接&#xff1a;https://www.bilibili.com/video/BV19G4y1K74d?p16&vd_source9b149469177ab5fdc47515e14cf3cf74 一、注册页面 https://developers.weixin.qq.com…

C#之WPF学习之路(2)

目录 控件的父类 DispatcherObject类 DependencyObject类 DependencyObject 类的关键成员和方法 Visual类 Visual 类的主要成员和方法 UIElement类 UIElement 类的主要成员和功能 FrameworkElement类 FrameworkElement 类的主要成员和功能 控件的父类 在 WPF (Windo…

idea 打不开项目 白屏

使用IDEA打开项目&#xff0c; 不知名原因崩溃了&#xff0c; 直接出现缩略图白屏。 解决过程&#xff1a; 尝试过重启IDEA&#xff0c;重启过电脑&#xff0c;重新引入相同项目&#xff08;使用不同路径&#xff0c;存在缓存记录&#xff0c;依然打不开&#xff09;&#xff…

亿道丨三防平板pad丨三防平板是指哪三防丨三防工业级平板电脑

三防工业级平板电脑成为许多行业中的重要工具。本文将介绍三防工业级平板电脑的特点以及其在各个领域中的广泛应用。 三防工业级平板电脑的特点 三防工业级平板电脑是指具备防水、防尘和防震功能的平板电脑。这些特点使得它们能够在恶劣环境中工作&#xff0c;如沙尘飞扬的工地…

easyexcel写入long类型数据精度丢失

1. 前言 在使用easyExcel导出Excel中 发现 long类型的数据格式精度丢失了 问题如下 尾数都成了00000 精度发生了丢失 2. 解决 将long类型的字段转成String 写入到Excel中增加解析器 LongStringConverter 例如 /*** 文件导出** param outputStream outputStream* param cla…