浅聊vue3中的ref、toRef、toRefs

前言

最近在学习vue3时,本人学习到了ref、toRef和toRefs的相关知识,接下来本人将根据自己所学习到的部分有关知识对这三个处理响应式数据的API进行讲解。

1. ref

作用:用用于创建一个包装基本数据类型的响应式对象,也就是将普通的JavaScript值转换为响应式对象。通常用于定义组件内部的响应式数据。

示例

js 复制代码
import { ref } from 'vue';

const count = ref(0);
console.log(count.value); // 输出 0

count.value++;
console.log(count.value); // 输出 1

注意: ref 创建的对象是一个带有 value 属性的包装对象,通过 myVar.value 来访问和修改值。 修改 ref 返回的对象的值,会触发视图更新。

2. toRef 函数:

作用:用于创建一个基于响应式对象的属性的 ref 对象。当我们需要再组件内将一个响应式对象的属性传递给另一个函数或者组件时,可以使用toRef创建一个基于响应式对象属性的ref对象,这样就不需要直接将属性值传递过去了。

示例

js 复制代码
import { ref, toRef } from 'vue';

const obj = reactive({ count: 0 });
const countRef = toRef(obj, 'count');
console.log(countRef.value); // 输出 0

obj.count++;
console.log(countRef.value); // 输出 1

注意: toRef 返回的对象是一个对原始响应式对象的属性的引用,修改 obj 中的属性会影响 toRef 返回的对象。

3. toRefs 函数:

作用:将一个响应式对象转换为普通对象,其中对象的每个属性都是 ref 对象。这个函数通常在setup语法糖中被使用。

示例

js 复制代码
import { reactive, toRefs } from 'vue';

const obj = reactive({ count: 0, name: 'wxc' });
const objRefs = toRefs(obj);

console.log(objRefs.count.value); // 输出 0
console.log(objRefs.name.value);  // 输出 'wxc'

obj.count++;
console.log(objRefs.count.value); // 输出 1

注意: toRefs 返回的对象中的每个属性都是 ref 对象,可以通过 .value 访问和修改。 修改原始对象的属性会反映在 toRefs 返回的对象上。

总结

总的来说,ref 用于创建基本数据类型的响应式对象,toRef 用于创建基于响应式对象的属性的 ref 对象,toRefs 用于将整个响应式对象转换为包含 ref 对象的普通对象。也就是说:

  • ref 主要用于包装基本数据类型,返回的对象需要通过 .value 访问和修改值。
  • toRef 用于创建基于响应式对象的属性的 ref 对象,通过 .value 访问和修改。
  • toRefs 用于将整个响应式对象的属性都变成 ref 对象,返回的对象中的每个属性可以通过 .value 访问和修改。
相关推荐
林九生几秒前
【Flutter】Flutter 拍照/相册选择后无法显示对话框问题解决方案
前端·javascript·flutter
程序员小寒7 分钟前
JavaScript设计模式(四):发布-订阅模式实现与应用
开发语言·前端·javascript·设计模式
Highcharts.js7 分钟前
Highcharts Gantt 实战:从框架集成到高级功能应用-打造现代化、交互式项目进度管理图表
前端·javascript·vue.js·信息可视化·免费
程序猿的程10 分钟前
把股票数据能力接进 AI:stock-sdk-mcp 的实践整理
前端·javascript·node.js
终端鹿17 分钟前
setup 语法糖从 0 到 1 实战教程
前端·javascript·vue.js
颜酱17 分钟前
回溯算法实战练习(2)
javascript·后端·算法
周淳APP18 分钟前
【React Fiber架构+React18知识点+浏览器原生帧流程和React阶段流程相串】
前端·javascript·react.js·架构
编码忘我33 分钟前
JVM 运行时数据区详解
java·后端·程序员
dear_bi_MyOnly37 分钟前
【 HTML + CSS + JavaScript 学习速通 max】
javascript·css·学习·html·学习方法
英俊潇洒美少年1 小时前
Vue3 中使用 Proxy 的 8 个注意事项
vue.js