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

Vue 3 响应式变量笔记

一、ref

定义:

ref 用于创建一个 基本类型对象类型的响应式引用,它会包裹一个 .value

适用场景:

  • 基础类型(如 string, number)响应式

  • 也可以用于对象,但对象值会被深度代理

示例:

import { ref } from 'vue'
​
const count = ref(0)
​
count.value++  // 需要通过 .value 访问

注意:

  • .value 是必须的,除非在模板中使用(模板中会自动解包)

  • ref 对象是不可解构的,解构会丢失响应式


二、reactive

定义:

reactive 用于将一个 对象 转换为响应式对象(深度响应式)

适用场景:

  • 管理多个字段的响应式对象(如表单、复杂结构)

示例:

import { reactive } from 'vue'
​
const state = reactive({count: 0,user: {name: 'Alice'}
})
​
state.count++

注意:

  • 不能用于基本类型,基本类型会被忽略或报错

  • 不能自动解构,解构时会丢失响应性


三、toRef

定义:

toRef 用于将响应式对象中的一个 属性单独提取ref,但仍然保持响应性连接。

适用场景:

  • 当你想把对象的某个属性传给子组件或单独处理时,保持其响应性

示例:

import { reactive, toRef } from 'vue'
​
const state = reactive({count: 0
})
​
const countRef = toRef(state, 'count')
countRef.value++   // 会同步更新 state.count

注意:

  • 如果原始对象属性不存在,toRef 也会创建一个响应式的引用


四、toRefs

定义:

toRefs 用于将一个响应式对象的每个属性都转换成 ref,适合解构使用。

适用场景:

  • 需要从 reactive 对象中解构多个值,又想保留响应性

示例:

import { reactive, toRefs } from 'vue'
​
const state = reactive({count: 0,name: 'Vue'
})
​
const { count, name } = toRefs(state)
count.value++

注意:

  • toRefs 仅适用于 reactive 对象,非响应式对象使用无意义


五、补充常见的响应式 API

shallowRef

用法:

只对最外层做响应式,内部对象不会被深度代理

import { shallowRef } from 'vue'
​
const obj = shallowRef({ name: 'Vue' })
obj.value.name = 'React'  // 不会触发更新

shallowReactive

用法:

类似于 reactive,但只代理第一层属性

import { shallowReactive } from 'vue'
​
const state = shallowReactive({user: {name: 'Vue'}
})
state.user.name = 'React'  // 不会触发响应式更新

readonly

用法:

创建一个只读的响应式对象

import { readonly } from 'vue'
​
const state = reactive({ count: 0 })
const readonlyState = readonly(state)
​
readonlyState.count++  // 报错,不能修改

isRef、isReactive、isReadonly、unref

用法:

判断响应式类型或取值

import { ref, isRef, isReactive, unref } from 'vue'
​
const a = ref(1)
console.log(isRef(a))           // true
console.log(unref(a))           // 1

总结表格

API类型支持深度响应解构支持.value访问场景描述
ref基础 & 对象不支持处理基本类型、单值引用
reactive仅对象不支持不支持管理复杂对象
toRef响应对象属性(单个)绑定单个属性为 ref
toRefs响应对象(批量)批量解构响应对象
shallowRef基础 & 对象不支持不追踪内部变更(如缓存场景)
shallowReactive对象不支持不支持第一层响应式,优化性能
readonly对象不支持不支持禁止更改响应数据
http://www.lryc.cn/news/603321.html

相关文章:

  • Chrome 提示 “此扩展程序不再受支持”(MacOS/Windows)
  • RabbitMQ面试精讲 Day 6:消息确认与事务机制
  • STL学习(?常用的遍历算法和查找算法)
  • 从协议栈到ath12k_mac_op_tx的完整调用路径
  • 云原生MySQL Operator开发实战(五):扩展与生态系统集成
  • Python 程序设计讲义(28):字符串的用法——格式化字符串
  • go install报错: should be v0 or v1, not v2问题解决
  • Vulkan入门教程 | 第二部分:创建实例
  • Docker用Web应用实例深入容器
  • Go语言实战案例-判断二叉树是否对称
  • 本地安装 SQLite 的详细步骤
  • p5.js 矩形rect绘制教程
  • SpringBoot整合RocketMQ(rocketmq-client.jar)
  • Python day28
  • 【智能协同云图库】智能协同云图库第八弹:基于阿里云百炼大模型—实现 AI 扩图功能
  • 2025年科研算力革命:8卡RTX 5090服务器如何重塑AI研究边界?
  • 0基礎網站開發技術教學(一) --(前端篇)--
  • 思途SQL学习 0729
  • 【CUDA显存不足的问题】
  • ironSource Ads Bidding 现已正式加入TopOn 聚合平台
  • 博弈论03——混合纳什均衡的收益求法
  • 【Linux入坑(一)—全志T133开发板适配欣瑞达LVDS 7寸(800*480)屏幕】
  • 函数对象 vs 函数指针 vs lambda:该用哪个才高效?
  • python学习DAY26打卡
  • Java高级技术知识点
  • GitLab的安装及使用
  • 路由器路由协议详解:从 RIP 到 OSPF 的技术演进
  • 理解Transformer解码器
  • 【术语扫盲】MCU与MPU
  • 《HCIA-Datacom 认证》希赛三色笔记:Vlan间三层通信过程解析