【Vue3】shallowRef和shallowReactive

shallowRef

作用:创建一个响应式对象,只对顶层属性进行响应式处理。

特点:只跟踪引用值的变化,不关心值内部的属性变化。

shallowReactive

作用:创建一个浅层响应式对象,只会使对象的最顶层属性变成响应式,对象内部的嵌套属性则不会改变。

特点:对象的顶层属性是响应式的,但嵌套对象的属性不是。

<template>
  <div>
    <h2>用户1 --- shallowRef</h2>
    <div>
      姓名:{{ user1.name }} <button @click="user1.name = '李四'">修改</button>
    </div>
    <div>
      年龄:{{ user1.age }} <button @click="user1.age = 22">修改</button>
    </div>
    <button @click="user1 = { name: '王五', age: 20, info: { height: 180 } }">
      换个用户
    </button>
    <div>
      身高:{{ user1.info.height }}
      <button @click="user1.info.height = 188">修改</button>
    </div>
  </div>
  <div>
    <h2>用户2 --- shallowReactive</h2>
    <div>
      姓名:{{ user2.name }} <button @click="user2.name = '李四'">修改</button>
    </div>
    <div>
      年龄:{{ user2.age }} <button @click="user2.age = 22">修改</button>
    </div>
    <button
      @click="user2 = { name: '袁公路', age: 200, info: { height: 180 } }"
    >
      换个用户
    </button>
    <div>
      身高:{{ user2.info.height }}
      <button @click="user2.info.height = 188">修改</button>
    </div>
  </div>
</template>

<script setup lang="ts">
import { shallowRef, shallowReactive } from "vue"
let user1 = shallowRef({
  name: "张三",
  age: 18,
  info: {
    height: 133,
  },
})
let user2 = shallowReactive({
  name: "田本初",
  age: 23,
  info: {
    height: 173,
  },
})
</script>

<style scoped></style>

总结

通过使用 shallowRef()shallowReactive() 来绕开深度响应。浅层式API创建的状态只在其顶层是响应式的,对所有深层的对象不会做任何处理,避免了对每一个内部属性做响应式带来的性能成本,使得属性的访问变得更快,提升性能。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

田本初

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

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

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

打赏作者

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

抵扣说明:

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

余额充值