当前位置: 首页 > news >正文

【Vue】Vue3.0(十)toRefs()和toRef()的区别及使用示例

上篇文章:Vue】Vue(九)OptionsAPI与CompositionAPI的区别

🏡作者主页:点击!

🤖Vue专栏:点击!

⏰️创作时间:2024年10月15日11点13分

文章目录

  • toRefs()和toRef()的区别及使用示例
    • 一、区别
      • (一)功能目的
      • (二)返回值类型
      • (三)使用场景侧重
    • 二、使用例子
      • (一)toRef示例
      • (二)toRefs示例

toRefs()和toRef()的区别及使用示例

一、区别

(一)功能目的

  • toRef
    • toRef的主要目的是将一个reactive对象中的某个属性转换为一个ref。这个转换后的ref与原reactive对象中的属性保持“响应式连接”,即修改ref的值会反映到原reactive对象中,反之亦然。
  • toRefs
    • toRefs用于将一个reactive对象的所有属性都转换为对应的ref对象。这样做的好处是在解构reactive对象时,不会丢失响应式特性。

根据下面的那张图
为了更容易理解:这种大白话说就是,toRefs()接受一个响应式的reactive对象,并将其中的所有的属性都取出来,并且将旧的响应式对象中的每一个属性都拿出来,并都分别被ref包裹,形成一个新的对象,对象中依然有name和age属性,只不过name和age的值分别都是ref(person.name)了:
{name:ref(person.name),age:ref(person.age)}
在这里插入图片描述

(二)返回值类型

  • toRef
    • 返回一个单独的ref对象。例如,如果有一个reactive对象state,使用toRef(state, 'property')会返回一个针对state.propertyref对象。
  • toRefs
    • 返回一个包含多个ref对象的普通对象。每个属性对应原reactive对象中的一个属性转换后的ref

(三)使用场景侧重

  • toRef
    • 适用于当需要单独操作reactive对象中的某个属性,并且希望保持与原对象的响应式连接时。例如,在函数传递中,只想传递某个特定属性并且保持响应式。
  • toRefs
    • 当需要解构一个reactive对象并且在解构后仍然保持每个属性的响应式时非常有用。这在将reactive对象的属性暴露给外部或者在组件内部进行更方便的属性操作时经常使用。

二、使用例子

(一)toRef示例

  1. 基础示例

    • 首先创建一个reactive对象:
    import { reactive, toRef } from 'vue';const state = reactive({count: 0,message: 'Hello'
    });const countRef = toRef(state, 'count');console.log(countRef.value); // 0countRef.value++;console.log(state.count); // 1
    
    • 在这个例子中,通过toRefreactive对象state中的count属性转换为一个ref对象countRef。修改countRef的值,会同时改变原reactive对象state中的count属性值。
  2. 函数传递示例

    • 假设有一个函数,它接受一个ref类型的参数并且在函数内部修改这个参数的值:
    const updateValue = (refValue) => {refValue.value = 10;
    };const state = reactive({num: 5
    });const numRef = toRef(state, 'num');updateValue(numRef);console.log(state.num); // 10
    
    • 这里将reactive对象中的num属性转换为ref后传递给updateValue函数,函数内部对ref值的修改反映到了原reactive对象上。

(二)toRefs示例

  1. 基础示例

    • 同样先创建一个reactive对象:
    import { reactive, toRefs } from 'vue';const state = reactive({name: 'John',age: 30
    });const refs = toRefs(state);console.log(refs.name.value); // Johnrefs.age.value++;console.log(state.age); // 31
    
    • 使用toRefsreactive对象state的所有属性转换为ref对象。然后可以通过解构后的refs对象方便地操作每个属性,并且这些操作会反映到原reactive对象上。
  2. 在组件中的应用示例

    • 在Vue组件中,当要将reactive对象的属性暴露给模板时,可以使用toRefs来保持响应式:
    import { reactive, toRefs, defineComponent } from 'vue';const MyComponent = defineComponent({setup() {const state = reactive({isVisible: false,text: 'Some text'});const refs = toRefs(state);return {...refs};}
    });
    
    • 在这个组件的setup函数中,将reactive对象state转换为refs后,直接将所有属性通过展开运算符返回给模板使用。这样在模板中可以直接使用isVisibletext,并且它们保持响应式特性。
http://www.lryc.cn/news/462841.html

相关文章:

  • 中科星图(GVE)——使用随机森林方法进行土地分类
  • 【蓝队技能】【C2流量分析】MSFCSSliver
  • 不推荐使用Scilab作为MATLAB的开源替代
  • C++智能指针及其应用
  • 06 算法基础:算法的定义、表现形式(自然语言、伪代码、流程图)、五个特性(有穷性、确定性、可行性、输入、输出)、好算法的设计目标
  • 【红外传感器】STM32C8T6标准库使用红外对管
  • STM32L010F4 最小系统设计
  • AI 工具大赏:探索智能时代的得力助手
  • 安通物流借助CRM重塑企业客户关系管理新格局
  • C++标准模板库--vector
  • 通信学习干货:运营商为什么要大力推广FTTR?
  • 【Spring篇】初识之Spring的入门程序及控制反转与依赖注入
  • OpenLayers:构建高质量的Web地图应用
  • Java比较两个Excel是否内容一致
  • UniApp入门教程
  • Vue.js中使用Element UI实现动态表单项管理及验证
  • 一插U盘就提示格式化?原因、恢复与预防全攻略
  • 云电脑使用教程标准版
  • 浏览器服务端文件下载控制(安全阻止、文件浏览器打开还是下载行为控制)
  • 机器学习——量子机器学习
  • [Linux] 创建可以免密登录的SFTP用户
  • 【部署篇】Redis-03主从模式部署(源码方式安装)
  • C/C++语言基础--C++四大类型转换讲解
  • KafKa 集群【docker compose】
  • 【工具篇】MLU运行XInference部署手册
  • 计算机网络:数据链路层 —— 扩展共享式以太网
  • 平安养老险深圳分公司:创新养老服务,深入践行金融为民
  • 静态站点生成器哪家强?
  • 从0开始部署优化虚拟机
  • 录屏有道, 四款必备录屏工具推荐!