vue3响应式工具 toRefs() 和 toRef()

前言

直接解构响应式对象的属性进行赋值给新的变量,会导致新变量失去响应式。
当修改新变量的值时,不会触发原始响应式对象的更新,从而在模板中也不会有相应的视图更新。

示例:

<template>
  <div>
    <p>姓名: {
  { person.name }}</p>
    <p>年龄: {
  { person.age }}</p>
    <button @click="changeName">修改名字</button>
    <button @click="changeAge">修改年龄</button>
  </div>
</template>
<script setup lang="ts">
import {
      reactive } from 'vue';

// person是响应式对象
const person = reactive({
     
  name: '张三',   // person.name 是响应式的
  age: 36         // person.age 是响应式的
});
// person.name = '李四' 会触发响应式更新
// person.age = 24 会触发响应式更新

// 解构赋值
let {
      name, age } = person
// 语句相当于执行:let name = person.name; let age = person.age
// 修改name、age,person的name属性、age属性不会改变

const changeName = () => {
     
  name += '哈'  // name改变了,没有触发响应式更新
  console.log(`name: ${
       name}, person.name: ${
       person.name}`); 
}
const changeAge = () => {
     
  age ++   // age改变了,没有触发响应式更新
  console.log(`age: ${
       age}, person.age: ${
       person.age}`)  
}
</script>

控制台打印结果:
在这里插入图片描述
let { name, age } = person 相当于执行let name = person.name; let age = person.age,使用方法changeNa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值