vue 3 第六章:to全家桶

1. toRef

  • 将一个对象中的属性转换成单独的响应式引用
  • 接收两个参数:参数一 => 对象 参数二 => 属性
  • 转换后的响应式引用会跟踪原始属性的变化
  • 转换后的响应式可以被用于计算属性监听器

1.1. 使用toRef函数

<template>
  <div class="wrapper">
    <button @click="handleClick">修改</button>
    <div>countRef: {{ countRef }}</div>
  </div>
</template>

<script setup lang="ts">
import { reactive, toRef } from 'vue';
let obj = {
  name: '张三',
  count: 0
}

let countRef = toRef(obj, 'count')

const handleClick = () => {
  countRef.value++
  console.log(countRef.value, 'countRef.value');
}

</script>

<style scoped>
div {
  font-size: 28px;
}
</style>

  • 原对象为非响应式,改变后,值会改变,但页面不会更新
    原始对象非响应式对象

  • 原对象是响应式,改变后,值改变,页面也会更新

<template>
  <div class="wrapper">
    <button @click="handleClick">修改</button>
    <div>countRef: {{ countRef }}</div>
  </div>
</template>

<script setup lang="ts">
import { reactive, toRef } from 'vue';
let obj = reactive({
  name: '张三',
  count: 0
})

let countRef = toRef(obj, 'count')

const handleClick = () => {
  countRef.value++
  console.log(countRef.value, 'countRef.value');
}

</script>

<style scoped>
div {
  font-size: 28px;
}
</style>

原始对象是响应式对象

2. toRefs

  • 将一个对象的所有属性变成响应式引用
  • 接收一个对象
  • 追踪原对象的引用关系
  • 原对象如果是响应式的,那么修改值会更新,视图会刷新
  • 原对象如果非响应式,那么修改值会更新,视图不会更新

2.1. 使用toRefs函数

<template>
  <div>
    <button @click="handleClick">修改</button>
    <div>num: {{ num }}</div>
    <div>count: {{ count }}</div>
    <div>age: {{ age }}</div>
  </div>
</template>

<script setup lang="ts">
import { reactive, toRefs } from 'vue';
let obj = reactive({
  num: 0,
  count: 0,
  age: 0
})

let { num, count, age } = toRefs(obj)

const handleClick = () => {
  num.value++
  console.log(num.value, 'num.value');
  count.value++
  console.log(count.value, 'count.value');
  age.value++
  console.log(age.value, 'age.value');
}

</script>

<style scoped>
div {
  font-size: 28px;
}
</style>

在这里插入图片描述

3. toRaw

  • 将一个响应式对象变成非响应式
  • 修改值会更新,视图不会刷新

3.1. 使用toRaw函数

<template>
  <div>
    <button @click="handleClick">修改</button>
    <div>num: {{ num }}</div>
    <div>count: {{ count }}</div>
    <div>age: {{ age }}</div>
  </div>
</template>

<script setup lang="ts">
import { reactive, toRaw } from 'vue';
let obj = reactive({
  num: 0,
  count: 0,
  age: 0
})

let { num, count, age } = toRaw(obj)
const handleClick = () => {
  num++
  console.log(num, 'num');
  count++
  console.log(count, 'count');
  age++
  console.log(age, 'age');
}

</script>

<style scoped>
div {
  font-size: 28px;
}
</style>

在这里插入图片描述

总结:这篇文章介绍了Vue3中将响应式对象的属性转换为响应式引用的toRef函数和用于将多个响应式对象的属性转换为响应式引用的toRefs函数,以及用于获取响应式对象的原始对象的toRaw函数。这些函数可以帮助我们快速创建响应式数据,实现数据的自动更新。需要注意的是,使用toRaw函数获取一个响应式对象的原始对象是不推荐的做法,因为原始对象不具备响应式的特性,对原始对象的修改不会触发相应的依赖更新。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

剑九_六千里

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

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

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

打赏作者

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

抵扣说明:

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

余额充值