Vue3基础(八)___ref__toRef__toRefs

简介: 本文介绍了Vue 3中`ref`、`toRef`和`toRefs`的用法,解释了`ref`用于创建响应式数据,`toRef`用于将对象的某个属性转换为响应式,但有局限性,而`toRefs`可以将一个响应式对象的所有属性都转换为响应式,从而保持其响应式特性。文章通过代码示例展示了这些API在实际开发中的应用。

回顾

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一样的特性改变响应数据,原始数据改变。

目录
相关文章
|
10天前
|
JavaScript
Vue3 : ref 与 reactive
Vue3 : ref 与 reactive
11 1
|
1月前
|
JavaScript API 开发者
Vue 3 为什么同时需要 Ref 和 Reactive?
Vue 3 为什么同时需要 Ref 和 Reactive?
|
1月前
|
JavaScript 前端开发 数据管理
|
4月前
|
JavaScript
vue3中reactive和ref函数及对比
vue3中reactive和ref函数及对比
29 1
|
4月前
|
JavaScript
vue3学习 ref和reactive的使用
vue3学习 ref和reactive的使用
44 0
|
4月前
|
JavaScript 前端开发
【Vue3】toRefs和toRef在reactive中的一些应用
【Vue3】toRefs和toRef在reactive中的一些应用
|
4月前
|
API
Vue3中的ref和shallowRef、reactive和shallowReactive
Vue3中的ref和shallowRef、reactive和shallowReactive
119 1
|
4月前
|
JavaScript API
vue3ref和reactive
vue3ref和reactive
24 0
|
4月前
|
JavaScript 前端开发
详解vue3的ref和reactive
详解vue3的ref和reactive
125 0
详解vue3的ref和reactive
|
4月前
Vue3的reactive、ref、toRef、toRefs用法以及区别
Vue3的reactive、ref、toRef、toRefs用法以及区别
80 0