vue toRefs 与 toRef

‌‌toRef与‌toRefs是Vue3中用于解构响应式对象的实用工具函数,主要解决reactive对象属性失去响应性的问题。‌ toRef针对单个属性转换,toRefs则批量处理对象属性。‌‌

toRef与toRefs的核心区别

  • ‌toRef‌:将响应式对象(‌reactive对象)的单个属性转为独立的ref对象,保持与源属性的双向绑定关系(修改ref值会同步修改源对象)。‌‌

  • ‌toRefs‌:将整个响应式对象的所有属性批量转换为普通对象,每个属性都是独立ref对象,常用于解构后保持响应性。‌‌

使用场景对比

  • ‌toRef适用场景‌:
    • 需要单独操作某个深层嵌套属性时。
    • 在组合式函数中返回特定属性给外部使用。‌‌
  • ‌toRefs适用场景‌:
    • 解构reactive对象时保留所有属性的响应性。
    • 在模板中直接展开对象属性避免冗余代码。‌‌

与reactive/ref的关联

1‌、与reactive的关系‌:

  • toRef/toRefs必须基于‌reactive创建的响应式对象使用。
  • 普通对象使用这两个API无法获得响应性。‌‌

2‌、与ref的差异‌:

  • ‌ref会拷贝数据并创建新引用,toRef/toRefs直接引用源数据。
  • 修改ref值不会影响原始数据,而toRef的修改会同步到源对象。‌‌

toRef 示例:

复制代码
<template>
  <div>
    <p>name: {{ name }}</p>
    <p>age: {{ age }}</p>
    <button @click="updateName">修改姓名</button>
    <button @click="updateAge">修改年龄</button>
  </div>
</template>

<script setup lang="ts">
import { reactive, toRef } from 'vue';
let person = reactive({ name: 'zs', age: 20 });
let name = toRef(person, 'name'); // 单个属性转ref
let age = toRef(person, 'age');

function updateName() {
  name.value += '~~~'; // 修改ref值,同步更新person.name
};
function updateAge() {
  age.value += 1; // 修改ref值,同步更新person.age
};
</script>

toRefs 示例:

复制代码
<template>
  <div>
    <p>name: {{ name }}</p>
    <p>age: {{ age }}</p>
    <button @click="updateName">修改姓名</button>
    <button @click="updateAge">修改年龄</button>
  </div>
</template>

<script setup lang="ts">
import { reactive, toRefs } from 'vue';
let person = reactive({ name: 'zs', age: 20 });
// let name = toRef(person, 'name'); // 单个属性转ref
// let age = toRef(person, 'age');
 const { name, age } = toRefs(person); // 批量转换所有属性

function updateName() {
  name.value += '--'; // 修改ref值,同步更新person.name
};
function updateAge() {
  age.value += 1; // 修改ref值,同步更新person.age
};
</script>
相关推荐
小蒜学长4 分钟前
基于SpingBoot+Vue的定向越野赛事管理系统的设计与开发(代码+数据库+LW)
java·前端·spring boot·后端·前后端分离·定向越野赛事
nyaomaru5 分钟前
is-kit 达成 100 Stars ⭐🎉 从 50 到 100,发生了什么?
前端·typescript
陈随易27 分钟前
副业搞钱点子之 Umami 统计如何赚钱
前端·后端·程序员
美狐美颜sdk1 小时前
直播APP开发中的视频帧处理:美颜SDK接入需要注意哪些细节?
大数据·前端·人工智能·音视频·美颜sdk
随风一样自由1 小时前
【React+TS71007】Next.js “use client” 误用导致 TS71007:客户端/服务端引入问题的完整排查与修复
前端·javascript·react.js
计算机魔术师1 小时前
1.4万亿没人接,OpenAI自己把价砍了1500亿
前端
非凡ghost1 小时前
Photo Supreme:专业高效的照片收藏管理专家
服务器·前端·人工智能·电脑·软件需求
zhangminghuan2 小时前
前端动态路由实现方案(Vue3 + VueRouter4)|后台权限路由实战
前端
一切皆是因缘际会2 小时前
大模型应用
前端·人工智能
SCandL1522 小时前
【无标题】
前端