Vue3基础(八)___ref__toRef__toRefs

75 篇文章 17 订阅
本文深入探讨Vue3中的ref、toRef和toRefs的区别与用法。ref用于创建响应式对象,改变时需通过.value修改;toRef仅能将对象的一个属性变为响应式,但不会触发页面更新;而toRefs则能将整个对象的所有属性都变成响应式。在处理复杂对象时,toRefs确保了解构后的每个属性仍保持响应性。
摘要由CSDN通过智能技术生成

回顾

ref

在ref中可以生成一个响应式数据,改变的时候需要.value来修改属性值

<template >
  <div class="container">
    <p @click="change">{{newObj}}</p>
  </div>
</template>
<script>
import { ref, toRef } from "vue";
export default {
  setup() {
  //创建一个对象
    let obj = { name: "alice", age: 12 };
    //使用ref创建响应式对象
    let newObj = ref(obj);
    //点击方法改变newObj 
    function change() {
      newObj.value= "Tom";
      console.log(obj, newObj);
    }
    return { newObj, change };
  }
};
  }
</script>
<style  scoped>
</style>

toRef

toRef只能改变对象的一个属性,将他变成响应式的
toRef传两个参数 第一个参数是要改变的对象,第二个参数是对象的属性,变成了响应式,但是页面也不会更新,改变后原来的对象属性也会跟着改变,页面不会改变

<template >
  <div class="container">
    <p @click="change">{{newObj}}</p>
  </div>
</template>
<script>
import { ref, toRef } from "vue";
export default {
  setup() {
    let obj = { name: "alice", age: 12 };
    let newObj = toRef(obj, "name");
    function change() {
      newObj.value = "Tom";
      console.log(obj, newObj);
    }
    return { newObj, change };
  }
};
</script>
<style  scoped>
</style>

在这里插入图片描述
使用toRef转成的响应式数据并不能更新页面,如果想更新的多个只能连续写多个了,于是就诞生了toRefs

toRefs

使用场景: 如果对一个响应数据, 进行解构 或者 展开, 会丢失他的响应式特性!

原因: vue3 底层是对 对象 进行监听劫持

作用: 对一个响应式对象的所有内部属性, 都做响应式处理

reactive/ref的响应式功能是赋值给对象的, 如果给对象解构或者展开, 会让数据丢失响应式的能力
使用 toRefs 可以保证该对象展开的每个属性都是响应式的

可以将一个对象每个属性变成响应式

<template >
  <div class="container">
    <p @click="change">{{newObj}}</p>
  </div>
</template>
<script>
import { ref, toRef,toRefs } from "vue";
export default {
  setup() {
    let obj = { name: "alice", age: 12 };
    // let newObj = toRef(obj, "name");
    let newObj = toRefs(obj);
    function change() {
      // newObj.value = "Tom";
      newObj.name.value = "Tome"
      console.log(obj, newObj);
    }
    return { newObj, change };
  }
};
</script>
<style  scoped>
</style>

也回和toRef一样的特性改变响应数据,原始数据改变。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

六卿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值