vue.js

关注公众号 jb51net

关闭
首页 > 网络编程 > JavaScript > javascript类库 > vue.js > Vue3 toRef和toRefs区别

一文搞懂Vue3中toRef和toRefs的区别

作者:前端小码哥

toRef 和 toRefs都是Vue3 中的响应式转换工具函数,换句话说,toRef 和 toRefs 就是用来创建响应式的引用的,主要用来取出响应式对象里的属性,或者解构响应式对象,本文小编就来带大家搞清楚Vue3中toRef和toRefs的区别,需要的朋友可以参考下

上面这段代码中:

从上面的代码中,我们可以看到,age 属性是使用 toRef 函数转换的具有响应式的 ref 属性,当我们更新时,使用 reactive 定义的响应式对象 info 中的 age 也会随着更新。

<script setup>
  import { reactive } from 'vue';
  let info = reactive({
    name: 'Echo',
    age: 26,
    gender: 'Male',
  })
  // 这样解构会丢失响应式效果
  let { name, age, gender } = info;
</script>

下面,我们一起看看 toRef 和 toRefs 的用法:

1. toRef

下面我们一起看一段代码:

<script setup>
  import { reactive, toRef } from 'vue';
  let info = reactive({
    name: 'Echo',
    age: 26,
  })
  let age = toRef(info, 'age');
  const updateInfoObjAge = () => {
    info.age++;
  }
  const updateAge = () => {
    age.value++;
  }
</script>
<template>
  <div id="app">
    <p>info对象中的age:{{ info.age }}</p>
    <button @click="updateInfoObjAge">更新info对象中的 age</button>
    <br />
    <p>使用toRef函数转换后的age:{{ age }}</p>
    <button @click="updateAge">更新 age</button>
  </div>
</template>

上面这段代码中:

从上面的代码中,我们可以看到,age 属性是使用 toRef 函数转换的具有响应式的 ref 属性,当我们更新时,使用 reactive 定义的响应式对象 info 中的 age 也会随着更新。

而且,从开发工具中,我们也可以看到,age 属性是一个具有 ref 响应式的属性。

2. toRefs

下面我们一起看一段代码:

<script setup>
  import { reactive, toRefs } from 'vue';
  let info = reactive({
    name: 'Echo',
    age: 26,
    gender: 'Male',
  })
  let { name, age, gender } = toRefs(info);
  const update = () => {
    name.value = 'Julie';
    age.value = 33;
    gender.value = 'Female';
  }
</script>
<template>
  <div id="app">
    <p>info对象中的name:{{ info.name }}</p>
    <p>info对象中的age:{{ info.age }}</p>
    <p>info对象中的gender:{{ info.gender }}</p>
    <br />
    <p>解构出来的name:{{ name }}</p>
    <p>解构出来的age:{{ age }}</p>
    <p>解构出来的gender:{{ gender }}</p>
    <button @click="update">更新数据</button>
  </div>
</template>

上面这段代码中:

从开发工具中,我们可以看到,解构出来的每个属性,都是独立的具有 ref 响应式的属性,因此,我们需要使用 .value 才能访问和修改其值。

3. 相同点

4. 不同点

通过上面对 toRef 和 toRefs 函数的了解,你们知道为什么需要 toRef 和 toRefs 了吗?

总结起来就是:在不丢失响应式的前提下,对响应式对象数据进行解构,这样如果在 setup 中返回 toRefs(obj),或者 toRef(obj, 'xxx'),我们就可以在 template 中不使用 obj.xxx 来取值了。

以上就是一文搞懂Vue3中toRef和toRefs的区别的详细内容,更多关于Vue3 toRef和toRefs区别的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文