Vue数据响应式reactive

基本作用

在Vue3中,reactive是用来创建响应式对象 ,reactive接收一个普通的对象,返回一个深层响应式代理对象,所谓"深层",是指对象的嵌套属性(包括数组,对象里的对象)也会被转成响应式的.

js 复制代码
import { reactive } from 'vue'
const state = reactive({
  count: 0,
  user: {
    name: '张三',
    age: 18
  }
})

现在,state.countstate.user.name的变化,都会被Vue追踪,并自动触发视图更新

与ref的区别

  • ref适合存储基本类型 (数字,字符串,布尔值),取值时需要.value
  • reactive更适合对象/数组 ,直接点属性即可,不需要.value
    示例对比:
js 复制代码
import { ref, reactive } from 'vue'

const num = ref(0)          // 基本类型
num.value++                 // 修改时要用 .value

const obj = reactive({ a: 1 })
obj.a++                     // 直接修改即可

特点

  1. 深层响应式
    不用担心嵌套对象不生效:
js 复制代码
   state.user.age++  // 会触发响应式更新
  1. 返回的是代理对象 :
    所以不能再用===直接对比原始对象和reactive对象
js 复制代码
const raw = { a: 1 }
const state = reactive(raw)
console.log(state === raw) // false
  1. 适合复杂状态管理
    在组件中维护多个字段,深层嵌套时,用reactive更直观

常见用法

  • 在setup里定义组件状态:
vue 复制代码
  <script setup>
import { reactive } from 'vue'

const state = reactive({
  count: 0,
  todos: []
})

function increment() {
  state.count++
}
</script>
<template>
  <div>
    <p>计数: {{ state.count }}</p>
    <button @click="increment">增加</button>
  </div>
</template>
  • 配合解构(注意要用toRefs否则响应式会丢失)
js 复制代码
import { reactive, toRefs } from 'vue'
const state = reactive({ count: 0, msg: 'hi' })
const { count, msg } = toRefs(state)
// 现在 count 和 msg 都是 ref

总结

  • reactive用于对象和数组的响应式转换
  • 配合ref一起用,可以灵活管理不同类型的状态
相关推荐
朱昆鹏38 分钟前
开源 Claude Code + Codex + 面板 的未来vibecoding平台
前端·后端·github
lyrieek43 分钟前
pgadmin的导出图实现,还在搞先美容后拍照再恢复?
前端
小书包酱1 小时前
在 VS Code中,vue2-vuex 使用终于有体验感增强的插件了。
vue.js·vuex
永远是我的最爱1 小时前
基于.NET的小小便利店前台收银系统
前端·sqlserver·.net·visual studio
从文处安1 小时前
「九九八十一难」第一难:前端数据mock指南(TS + VUE)
前端
Zhencode1 小时前
Vue3 响应式依赖收集与更新之effect
前端·vue.js
x-cmd1 小时前
[x-cmd] jsoup 1.22.1 版本发布,引入 re2j 引擎,让 HTML 解析更安全高效
前端·安全·html·x-cmd·jsoup
天下代码客1 小时前
使用electronc框架调用dll动态链接库流程和避坑
前端·javascript·vue.js·electron·node.js
weixin199701080162 小时前
【性能提升300%】仿1688首页的Webpack优化全记录
前端·webpack·node.js
冰暮流星2 小时前
javascript之数组
java·前端·javascript