Vue 3中,`toRef` 和 `toRefs`

在Vue 3中,`toRef` 和 `toRefs` 是两个帮助函数,它们用于从 `reactive` 对象中提取出响应式的引用。这两个函数在处理复杂的响应式状态或者在组合式API中非常有用。

### toRef

`toRef` 创建一个 `ref` 对象,它是一个对于 `reactive` 对象中某个属性的响应式引用。

**简单应用例子:**

```javascript
import { reactive, toRef } from 'vue';

const state = reactive({
  username: 'JohnDoe',
  age: 30
});

// 使用 toRef 从 reactive 对象中提取一个属性作为 ref
const usernameRef = toRef(state, 'username');

// 现在 usernameRef 是一个 ref 对象,它的 value 属性是响应式的
console.log(usernameRef.value); // 输出: 'JohnDoe'

// 修改 reactive 对象中的 username 属性
state.username = 'Alice';

// usernameRef 的 value 也随之更新,保持响应性
console.log(usernameRef.value); // 输出: 'Alice'
```

### toRefs

`toRefs` 接受一个 `reactive` 对象,并将其所有属性转换为一个包含 `ref` 对象的数组。

**简单应用例子:**

```javascript
import { reactive, toRefs } from 'vue';

const state = reactive({
  username: 'JohnDoe',
  age: 30
});

// 使用 toRefs 将 reactive 对象转换为多个 ref 对象
const { username, age } = toRefs(state);

// username 和 age 现在都是 ref 对象,它们的 value 属性是响应式的
console.log(username.value); // 输出: 'JohnDoe'
console.log(age.value);      // 输出: 30

// 修改 reactive 对象中的 age 属性
state.age = 31;

// age 的 value 也随之更新,保持响应性
console.log(age.value);      // 输出: 31
```

### 使用场景

- **跨组件传递**:当你需要将一个响应式状态作为多个 `ref` 对象传递给子组件时,`toRefs` 非常有用。
- **保持响应性**:在将响应式状态解构为单独的 `ref` 对象后,仍然希望保持其响应性,`toRef` 和 `toRefs` 可以帮你做到这一点。
- **函数参数**:如果你需要将响应式状态作为参数传递给函数,并且希望这些参数保持响应性,`toRef` 可以创建单独的 `ref` 对象。

### 注意事项

- `toRef` 和 `toRefs` 创建的 `ref` 对象与原始的 `reactive` 对象共享响应性依赖。如果原始对象被销毁,那么由 `toRef` 或 `toRefs` 创建的 `ref` 对象也会失去响应性。
- 当使用 `toRefs` 解构 `reactive` 对象时,每个 `ref` 对应于原对象的一个属性,并且它们都引用同一个 `reactive` 状态。

这两个函数提供了一种灵活的方式,让你可以在Vue 3的响应式系统中以解构和模块化的方式工作。

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

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

相关文章

MindSponge分子动力学模拟——安装与使用

技术背景 昇思MindSpore是由华为主导的一个,面向全场景构建最佳昇腾匹配、支持多处理器架构的开放AI框架。MindSpore不仅仅是软件层面的工具,更重要的是可以协同华为自研的昇腾Ascend平台,做到软硬件一体的行业解决方案。基于MindSpore的高通…

解析源代码安全的防泄密解决途径

随着各行各业业务数据信息化发展,各类产品研发及设计等行业,都有关乎自身发展的核心数据,包括业务数据、代码数据、机密文档、用户数据等敏感信息,这些信息数据有以下共性: 属于核心机密资料,万一泄密会对…

YOLOv9全网最新改进系列:YOLOv9完美融合标准化的注意力模块NAM,高效且轻量级的归一化注意力机制,助力目标检测再上新台阶!

YOLOv9全网最新改进系列:YOLOv9完美融合标准化的注意力模块NAM,高效且轻量级的归一化注意力机制,助力目标检测再上新台阶!!! YOLOv9原文链接戳这里,原文全文翻译请关注B站Ai学术叫叫首er B站全…

STM32自学教程-前言

目录 为什么要写这个教程 学习STM32需要具备的知识 为什么要写这个教程 其实最重要的目的是为了总结自己学习和整理的资料,同时锻炼下自己的写作水平。毕业已经十多年了,平常也一直爱学习一些自己感兴趣的东西。自己对软件硬件都非常感…

GEE-python 更新提示(含网页上Colab / JupyterLab 和基于本地的操作 )

今天收到了来在GEE开发中心的邮件,作为 Google 对安全性改进的一部分,您将看到(Python)ee.Authenticate()和(命令行)earthengine 身份验证调用的行为方式发生了一些变化。他们将继续生成凭证文件,但审批步骤会有所不同。 具体修改部分: 这仅适用于使用 Python 库或命…

[笔试训练](十六)

目录 046:字符串替换 047:神奇数 048:DNA序列 046:字符串替换 字符串替换_牛客题霸_牛客网 (nowcoder.com) 题目&#xff1a; 题解&#xff1a; 简单模拟题~ class StringFormat { public:string formatString(string str, int n, vector<char> arg, int m) {strin…

Springboot-Jedis实现分布式锁

依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.3.0</version></dependency>配置类 Configuration EnableConfigurationProperties(RedisProperties.class) public class Redi…

QT4-升级到QT5(1)

1.C报错汇总_nafxcwd.lib error lnk2001-CSDN博客1 1.QT3Support QWidget::setShown 改为QWidget::setVisible 2.头文件 #include<QWidget> 3.部分函数替换

了解WebSocket

1.概念&#xff1a; WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;属于应用层协议。 WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握…

电脑怎么压缩视频?win端、Mac端压缩工具分享~

我们经常需要处理和分享视频文件。然而&#xff0c;视频文件往往会占用大量的存储空间&#xff0c;特别是高分辨率和高质量的视频。为了方便存储和分享&#xff0c;我们常常需要将视频文件进行压缩。本文将介绍如何使用电脑系统win端或Mac端自带的视频编辑器、以及常用的剪辑软…

使用docker-compose编排lnmp(dockerfile)完成wordpress

文章目录 使用docker-compose编排lnmp&#xff08;dockerfile&#xff09;完成wordpress1、服务器环境2、Docker、Docker-Compose环境安装2.1 安装Docker环境2.2 安装Docker-Compose 3、nginx3.1 新建目录&#xff0c;上传安装包3.2 编辑Dockerfile脚本3.3 准备nginx.conf配置文…

云端部署Stirling PDF:构建个人App的API调用指南(附Python源码)

今天发现一个Github的开源项目&#xff0c;Stirling PDF&#xff0c;项目地址如下&#xff1a;https://gitcode.com/Stirling-Tools/Stirling-PDFhttps://gitcode.com/Stirling-Tools/Stirling-PDF?utm_sourceartical_gitcode目前CSDN上已经有好几个up主都介绍了这个项目&…

Python中类方法、静态方法和实例方法的使用场景

在Python中&#xff0c;类方法&#xff08;classmethod&#xff09;、静态方法&#xff08;staticmethod&#xff09;和实例方法是类的三种主要方法类型&#xff0c;它们各自适用于不同的场景&#xff1a; 实例方法 实例方法是最常用的方法类型&#xff0c;它用于操作实例属性…

环保设备统一管理系统

在环保意识日益增强的今天&#xff0c;企业如何有效管理环保设备&#xff0c;确保其正常运行&#xff0c;减少环境污染&#xff0c;成为了一个重要议题。HiWoo Cloud平台以其独特的环保设备统一管理系统&#xff0c;为企业提供了一套完整的解决方案&#xff0c;帮助企业实现绿色…

该怎么发外贸开发信才能瞄准大客户?

1.要知道80%的业务源自于大客户&#xff0c;要合理利用自己的时间。其实我自己发邮件一直都是粗发模式&#xff0c;效果也还可以&#xff0c;主要是因为我的客户都是展会上的&#xff0c;所以拒收和失败率会很低&#xff0c;而且客户意向度一直很高&#xff0c;但是花费的时间精…

Remix中使用 Tailwind

如何Remix 中使用 Tailwindcss Remix是通过 Vite 进行构建的&#xff0c;Vite 原生就支持 PostCSS&#xff0c;通过以下几步就可以设置完成 安装 PostCSS 插件 npm install -D tailwindcss autoprefixer添加PostCSS配置文件 ## postcss.config.js export default {plugins:…

SQL面试题每日一题之求解用户最长连续登录天数

SQL面试题每日一题之求解用户最长连续登录天数 之后会不定期更新每日一题sql系列。 SQL面试题每日一题系列内容均来自于网络以及实际使用情况收集&#xff0c;如与各大厂面试题有雷同&#xff0c;纯属巧合。 1.题目 问题&#xff1a;以下为多个用户每日登录记录数据&#x…

microsoft的azure语音,开发环境运行正常,发布到centos7线上服务器之后无法运行解决方案

最近在做AI语音对话的功能&#xff0c;用到了azure的语音语音服务&#xff0c;开发的时候还算顺利&#xff0c;部署到线上后&#xff0c;发现在正式服上无法完成语音转文本的操作&#xff0c;提示&#xff1a; org.springframework.web.util.NestedServletException: Handler …

浅谈Windows 上的线程亲和性(Thread affinity)

​ 前言 线程属性包括是否分离、亲和性、调度策略和优先级等。Linux默认的调度策略是CFS(完全公平调度算法),而 Windows 是基于优先级抢占式的策略。 在这些方面,Windows 和 Linux 差异巨大。本文仅针对 Windows 系统的线程亲和性进行探讨。 线程亲和性(Thread affinity) 什…

Softmax和Sigmoid

Softmax和Sigmoid函数在机器学习和深度学习中都扮演着重要的角色&#xff0c;但它们在功能和应用上存在一些关键的区别。 功能和应用领域&#xff1a; Softmax函数&#xff1a;主要用于多分类问题。它将一组实数&#xff08;通常是神经网络的输出&#xff09;转换为一组概率分…