当前位置: 首页 > news >正文

Vue: ref、reactive、shallowRef、shallowReactive

1. ref

作用:创建响应式数据引用(支持基本类型和对象)。
原理

  • 通过 value 属性访问/修改数据

  • 对象类型内部自动转换为 reactive

  • 使用 Object.defineProperty 实现响应式

API

import { ref } from 'vue'const count = ref(0) // 基本类型
const user = ref({ name: 'Alice' }) // 对象类型自动转为 reactive// 修改值
count.value++ 
user.value.name = 'Bob'

模板中使用

<template><div>{{ count }}</div><button @click="count++">Increment</button>
</template>

2. reactive

作用:创建深层响应式对象(仅支持对象/数组)。
原理

  • 基于 Proxy 实现深度响应式

  • 嵌套对象自动转为 reactive

  • 直接访问属性(无需 .value

API

import { reactive } from 'vue'const state = reactive({count: 0,user: { name: 'Alice' } // 嵌套对象自动响应式
})// 修改值
state.count++
state.user.name = 'Bob'

模板中使用

<template><div>{{ state.count }}</div><button @click="state.count++">Increment</button>
</template>

3. shallowRef

作用:创建浅层响应式引用(仅顶层 value 响应)。
原理

  • 只追踪 .value 变化(不追踪内部属性)

  • 对象内部修改 不会 触发更新

  • 替换整个 .value 触发更新

API

import { shallowRef } from 'vue'const user = shallowRef({ name: 'Alice' })//  ❌ 内部修改无效(不会触发更新)
user.value.name = 'Bob'// ✅ 替换整个对象有效(触发更新)
user.value = { name: 'Bob' }

典型场景

  • 大型不可变数据(如三方库实例)

  • 性能敏感场景避免深度监听

4. shallowReactive

作用:创建浅层响应式对象(仅顶层属性响应)。
原理

  • 只响应顶层属性变化

  • 嵌套对象 不会 自动转为响应式

API

import { shallowReactive } from 'vue'const state = shallowReactive({count: 0,user: { name: 'Alice' } // 嵌套对象非响应式
})// ✅ 顶层修改有效
state.count++ // ❌ 嵌套修改无效(不会触发更新)
state.user.name = 'Bob'

典型场景

  • 表单分组(只关心组变化)

  • 性能优化(避免深度监听大对象)

总结对比表

特性refreactiveshallowRefshallowReactive
支持类型所有类型对象/数组所有类型对象/数组
深层响应式✅ (对象自动转)
响应触发条件.value 变化属性修改.value 替换顶层属性修改
访问方式需要 .value直接访问需要 .value直接访问
性能开销中等较高(深度监听)
典型场景基本类型/对象引用复杂状态对象大型不可变数据层级明确的数据

代码示例总结

<script setup>
import { ref, reactive, shallowRef, shallowReactive } from 'vue'// 1. ref(深度响应)
const deepRef = ref({ count: 0 })
deepRef.value.count++ // 触发更新// 2. reactive(深度响应)
const deepReactive = reactive({ user: { name: 'Alice' } })
deepReactive.user.name = 'Bob' // 触发更新// 3. shallowRef(浅层响应)
const shallow = shallowRef({ count: 0 })
shallow.value.count++ //  ❌ 不触发更新
shallow.value = { count: 1 } // ✅ 触发更新// 4. shallowReactive(浅层响应)
const shallowState = shallowReactive({ user: { name: 'Alice' } 
})
shallowState.user.name = 'Bob' //  ❌ 不触发更新
shallowState.user = { name: 'Bob' } // ✅ 触发更新
</script>

选择建议

  • ref 处理基本类型或需要整体替换的对象

  • reactive 处理深度嵌套的复杂状态

  • shallowXXX 优化大型数据或明确不需要深度监听的场景


文章转载自:

http://nlRht0a6.tcwLp.cn
http://4fMKbrqq.tcwLp.cn
http://sn2WCVaR.tcwLp.cn
http://i8JygiG5.tcwLp.cn
http://EzQ9kuRi.tcwLp.cn
http://Or9TxHfK.tcwLp.cn
http://hU2FvjRx.tcwLp.cn
http://yOrj2To7.tcwLp.cn
http://4wrk1q2o.tcwLp.cn
http://6PnPwb1O.tcwLp.cn
http://gIrNJZUH.tcwLp.cn
http://6vrDM0yc.tcwLp.cn
http://rvqQM6hg.tcwLp.cn
http://WTsV6bpp.tcwLp.cn
http://fV85vRNA.tcwLp.cn
http://6simfL0Q.tcwLp.cn
http://VvO7MlbF.tcwLp.cn
http://FiswzilU.tcwLp.cn
http://HlULzLhV.tcwLp.cn
http://Rr2EIQqx.tcwLp.cn
http://UuoroiZ4.tcwLp.cn
http://usdmXSN0.tcwLp.cn
http://sqdSZQbt.tcwLp.cn
http://oAtCMIcC.tcwLp.cn
http://x6nUT7Ce.tcwLp.cn
http://voPsTgWk.tcwLp.cn
http://wD8yraCr.tcwLp.cn
http://rMV2PcpQ.tcwLp.cn
http://hhnLeR2U.tcwLp.cn
http://nr3Q8UhT.tcwLp.cn
http://www.dtcms.com/a/373571.html

相关文章:

  • HarmonyOS 应用开发深度解析:基于 ArkTS 的跨组件状态管理最佳实践
  • 鸿蒙系统下的智能设备故障检测实战:从监控到自愈的全流程实现
  • windows11备份系统盘
  • 小迪web自用笔记31
  • 【前端埋点】纯前端实现 A/B Test
  • Vue3+Cesim ^1.122.0 Home按钮位置自定义;时间轴UTC时间转化为北京时间
  • 第五十五天(SQL注入增删改查HTTP头UAXFFRefererCookie无回显报错复盘)
  • leetcode 1317 将整数转换为两个无零整数的和
  • 高斯数据库(GaussDB)常用命令
  • git 配置本地添加ssh
  • ⸢ 肆 ⸥ ⤳ 默认安全建设方案:c-1.增量风险管控
  • 从零开始学大模型之大模型应用
  • 事务设置和消息分发
  • 人工智能-python-深度学习-神经网络-GoogLeNet
  • 告别进度拖延:19款项目进度管理软件深度测评
  • lesson56:CSS进阶指南:Flex布局、变换渐变与动画实战全解析
  • 【高等数学】第十一章 曲线积分与曲面积分——第四节 对面积的曲面积分
  • 精通Octokit:GitHub API开发全攻略
  • 超越模仿:探寻智能的本源
  • CSS 定位技术解析
  • IACheck赋能AI环评报告审核,推动环保设备制造行业发展
  • Photoshop保存图层
  • Java高级编程--XML
  • Nano Banana 技术深度解析:重新定义AI影像的革命性里程碑
  • 运作管理学习笔记5-生产和服务设施的选址
  • 基于单片机的智能路灯(论文+源码)
  • Python中hashlib模块 - 哈希加密
  • Webpack开发:从入门到精通
  • paddlex3.0.1-ocr服务化安装部署(docker)
  • [Upscayl图像增强] 应用程序状态管理 | 响应式状态Jotai | 持久化设置