#Vue3篇:响应式工具ref()、toRef()、 toRefs()、reactive()的用法和区别

news2025/1/11 7:07:08

ref()

定义: ref()接收一个普通的Javascript值作为参数,将其转换为响应式对象(ref对象)。
ref对象有一个.value属性,用于获取和修改之。
参数1: 一个普通的Javascript值作为参数

import { ref } from 'vue'
const count = ref(0)
console.log(count.value) // 0
count.value++ // 1

参数2: 一个工厂函数,用于创建延迟计算的响应式对象。

import { ref } from 'vue'
const name = ref(() => {
  console.log('计算 name')
  return 'Vue 3'
})
console.log(name.value) // 计算 name, Vue 3

返回: 响应式对象

toRef()

定义: 将一个响应式对象的属性转换为一个单独的ref对象。
参数:第一个参数,响应式对象;第二个参数,响应式对象的某一属性。
作用:转换后的ref对象与原对象属性具有相同的响应式行为。当修改ref对象时,原对象的属性也会同时更新。

import { reactive, toRef } from 'vue'

const user = reactive({
  name: 'Tom',
  age: 20
})

const ageRef = toRef(user, 'age')

console.log(ageRef.value) // 20
ageRef.value++

console.log(user.age) // 21

toRefs()

定义: 将一个响应式对象转换成普通Javascript对象,这个普通对象中的所有属性都是ref对象。
参数:响应式对象
作用: 当修改ref对象时,原对象的属性也会同步更新。

import { reactive, toRefs } from 'vue'

const user = reactive({
  name: 'Tom',
  age: 20
})

const userRefs = toRefs(user)

console.log(userRefs.age.value) // 20
userRefs.age.value++

console.log(user.age) // 21

reactive()

定义:将一个普通Javascript对象转换为响应式对象
参数:普通对象
作用:响应式对象中的所有属性都是响应式的,当属性的值改变时,视图会自动更新。

import { reactive } from 'vue'

const user = reactive({
  name: 'Tom',
  age: 20
})

console.log(user.age) // 20
user.age++
// 视图自动更新


ref()用于创建简单的响应式对象;
toRef()用于将响应式对象的属性转换为单独的ref对象;
toRefs()用于将整个响应式对象转换成普通对象,每一个属性都是ref对象;
reactive()用于创建嵌套响应式对象

toRef() & toRefs()是两个不同的函数,用于处理响应式对象中的属性
在 Vue 3 中,toRefs() 和 toRef() 是两个不同的函数,用于处理响应式对象中的属性。

toRefs() 函数接受一个响应式对象,返回一个新的对象,该对象将所有属性转换为 ref 对象。这是因为当我们将响应式对象传递给子组件时,我们需要将其解构为单独的 ref 对象以避免在子组件中更改属性时破坏父组件的响应式追踪。通过使用 toRefs() 函数,我们可以将响应式对象的所有属性转换为 ref 对象,并将其传递给子组件,以便在子组件中使用属性时保持响应式追踪。

import { reactive, toRefs } from 'vue'

const state = reactive({
  name: 'John',
  age: 30
})

const refs = toRefs(state)
console.log(refs.name.value) // 'John'

toRef() 函数接受一个响应式对象和一个属性名称,返回一个新的 ref 对象,该对象引用响应式对象的属性。这是因为在某些情况下,我们只需要引用响应式对象的单个属性,并且不需要将整个响应式对象的属性都转换为 ref 对象。使用 toRef() 函数,我们可以将响应式对象的单个属性转换为 ref 对象。

import { reactive, toRef } from 'vue'

const state = reactive({
  name: 'John',
  age: 30
})

const ageRef = toRef(state, 'age')
console.log(ageRef.value) // 30

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

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

相关文章

java明文数据加密、脱敏方法总结

前言 在一些安全性要求比较高的项目里,避免不了要对敏感信息进行加解密,比如配置文件中的敏感信息。 第一种方法(自定义加解密) 加解密工具类: public class SecurityTools {public static final String ALGORITHM…

最新!Windows 11 更新将整合 AI 技术

微软MVP实验室研究员张雅琪(阿法兔)微软最有价值专家(MVP),毕业于外交学院和香港大学,IT 技术社区创始人,中关村互联网金融研究院兼职研究员,多次受邀在微软 Reactor 进行公开演讲&a…

JS的BroadcastChannel与MessageChannel

BroadcastChannel与MessageChannel BroadcastChannel BroadcastChannel以广播的形式进行通信 BroadcastChannel用于创建浏览器标签页之间的通信 使用BroadcastChannel的浏览器标签页面必须要遵循同源策略 页面1使用BroadcastChannel创建一个频道,页面2使用Broadc…

latex入门指南:插入图片、表格、公式方法一览

省事链接: 生成表格latex代码:www.tablesgenerator.com 生成公式latex代码:www.latexlive.com 目录1 插入图片1.1 移动标题位置1.2 双栏文章中图片横跨双栏2 插入表格2.1 常规表格2.2 设置单元格宽度2.3 合并单元格2.4 三线表2.5 移动标题位置…

脑机接口科普0018——前额叶切除手术

本文禁止转载!!! 首先说明一下,前额叶切除手术,现在已经不允许做了。 其次,前额叶切除手术,发明这个手术的人居然还获得了诺贝尔奖。太过于讽刺。1949年的那次诺贝尔医学奖(就是我…

打怪升级之发送单个UDP包升级版

目标 1.message的输入由edit_control进行,需要捕获输入。 2.用户的主机地址和发送地址不一样,需要分别设置并绑定。 设计RC外观 必备组件:主机IP与端口,从机IP与端口,消息框,发送,连接按钮。…

打卡小达人之路:Spring Boot与Redis GEO实现商户附近查询

在当今社会,定位服务已经成为了各种应用的重要组成部分,比如地图、打车、美食等应用。如何在应用中实现高效的附近商户搜索功能呢?传统的做法是将商户的经纬度信息存储在关系型数据库中,然后使用SQL查询语句实现附近商户搜索功能。…

Anaconda环境配置Python数据分析库Pandas的方法

本文介绍在Anaconda环境中,安装Python语言pandas模块的方法。 pandas模块是一个基于NumPy的开源数据分析库,提供了快速、灵活、易用的数据结构和数据分析工具。它的主要数据结构是Series和DataFrame,可以处理各种数据格式,如CSV、…

听客户说|东台农商银行:建立健全数据安全管理制度的探索与实践

夯实银行数据安全,需“规划先行、谋定后动”,首要工作是确立管理工作的行动纲要,并据此建立制度保障体系以贯彻纲要,而后才是具体的行动措施和日常检查、监测。从银行数据安全建设实践路径来说,我认为可以用“盘现状、…

markdown(.md)常用语法

markdown(.md)常用语法markdown常用语法常用目录标题分割线格式空格换行无序列表有序列表列表嵌套文字引用行内代码代码块字体转义斜体加粗删除线下划线功能链接todo listtypora插入图片并保存在本地包含了一些常用的MD语法和操作,语法不是很…

ECS 图解

旧系统执行逻辑:程序开发中有一个很经典的设计模式/框架 :MVCvc 部分是系统, m 是组件。 我通过名为 index 的索引访问此数据:现在该组件具有用于读取和写入该数据的数据。 看看源代码中的Entity 。 struct 结构体。 64位索引 &am…

STM32查看内存占用的map文件解析

STM32查看内存占用的map文件解析STM32查看内存占用的map文件解析程序内存分析在stm32中,通常堆向高地址增长(向上增长),栈向低地址增长(向下增长);1.2 flash、ROM、RAM的区别1.3 通常stm32在kei…

跨过社科院与杜兰大学金融管理硕士项目入学门槛,在金融世界里追逐成为更好的自己

没有人不想自己变得更优秀,在职的我们也是一样。当我们摸爬滚打在职场闯出一条路时,庆幸的是我们没有沉浸在当下,而是继续攻读硕士学位,在社科院与杜兰大学金融管理硕士项目汲取能量,在金融世界里追逐成为更好的自己。…

如何做好项目各干系人的管理及应对?

如何更好地识别、分析和管理项目关系人?主要有以下几个方面: 1、项目干系人的分析 一般对项目干系人的分析有2种方法, 方法一:权利(影响),即对项目可以产生影响的人; 方法二&#xf…

终端配色-Docker容器终端

20230309 - 0. 引言 平时使用SSH,通常都是使用securecrt来用,毕竟也算是之前windows下一种使用的工具,在mac下使用还算方便;进入终端后,可以通过调整配色来调整编程环境。平时经常使用屎黄色的那种配色,毕…

Spark单机伪分布式环境搭建、完全分布式环境搭建、Spark-on-yarn模式搭建

搭建Spark需要先配置好scala环境。三种Spark环境搭建互不关联,都是从零开始搭建。如果将文章中的配置文件修改内容复制粘贴的话,所有配置文件添加的内容后面的注释记得删除,可能会报错。保险一点删除最好。Scala环境搭建上传安装包解压并重命…

千言数据集赛题介绍

赛题题目 通用信息抽取任务评测 将多种不同的信息抽取任务用统一的通用框架进行描述,着重考察相关技术方面在面对新的、未知的信息抽取任务与范式时的适应和迁移能力。 赛题介绍 信息抽取旨在将非结构化文本中的信息进行结构化,是自然语言处理的基础…

Highcharts 写 venn图 (韦恩图),以及解决项目中venn的报错

Highcharts 写 venn图 鼠标悬浮效果以及点击事件 效果图如下: 参考highcharts官网venn 具体方法 安装包依赖:npm install highcharts //组件中引入 import Highcharts from highcharts; // import exportingInit from highcharts/modules/export…

【项目总结】基于SSM+SpringBoot+Redis的个人博客系统项目总结

文章目录项目介绍(开发背景)数据库设计主要使用到的技术点前端后端自定义统一返回对象自定义拦截器加盐加密操作分页功能session持久化自定义头像的存储和获取项目编写过程中遇到的困难点困难点一(小)困难点二(小&…

C++11:右值引用和移动语义

文章目录1. 左值和右值表达式1.1 概念1.2 左值和右值2. 左值引用和右值引用2.1 相互引用2.2 示例代码2.3 左值引用使用场景缺点2.4 右值引用和移动语义小结2.5 移动赋值2.6 右值引用的其他使用场景右值引用版本的插入函数3. 完美转发3.1 万能引用3.2 如何实现完美转发3.3 完美转…