vue3 reactive,对象可以不写.value

基本类型不能用

虽然可以显示,但是不可以响应式

 

 所改数字可以直接用对象.值

 

 数组问题

 

 然后改造一下

 就是把源对象对象代理对象

 

简称proxy

 

### Vue 3 中 `reactive` 对象重新赋值的方法 在 Vue 3 的响应式系统中,直接对整个 `reactive` 创建的对象进行替换会使其失去原有的响应特性。这是因为每次调用 `reactive` 都会产生新的独立对象实例[^1]。 为了保持对象的响应性并更新其内部状态,推荐的做法是在 `reactive` 定义的对象内指定可变属性,并通过修改这些特定字段而是整体覆盖的方式来实现数据变更: #### 方法一:使用内置属性更改 如果目标是对现有对象的部分内容做调整,则可以直接改变该对象下的具体键值对而必担心丢失响应能力。 ```javascript let state = reactive({ message: "初始消息" }); // 更新message属性会影响state的整体响应性质 setTimeout(() => { state.message = "新消息"; }, 2000); ``` 这种方法适用于大多数情况下简单的状态管理需求[^2]。 #### 方法二:利用 `ref` 进行深层嵌套结构的操作 对于更复杂的数据模型比如数组或具有多层嵌套的对象来说,可以考虑采用组合式的解决方案——即在外围包裹一层 `reactive` 同时针对那些预期会发生频繁变动的地方引入 `ref` 来作为中介桥梁。 ```javascript import { reactive, ref } from 'vue'; const userState = reactive({ profileInfo: null, settings: {} }); userState.profileInfo = ref({ username: "", avatarUrl: "" }); // 修改profileInfo中的username setTimeout(() => { userState.profileInfo.value.username = "张三"; }, 3000); console.log(userState.profileInfo.value.username); // 输出:"张三" ``` 此方式仅能够维持外部容器级别的反应机制完好无损,同时也允许灵活地处理内部组件的状态转换问题。 #### 方法三:借助工具函数辅助完成深拷贝与合并操作 当面临较为复杂的业务逻辑或是需要同步多个地方的状态变化时,还可以借助一些实用程序库(如 lodash 或者 vue 自带的一些 API)来进行深层次的对象复制和融合工作,从而确保所有关联视图都能及时反映出最新的改动情况。 ```javascript import { reactive, isReactive, toRaw } from 'vue'; import _cloneDeep from 'lodash/cloneDeep'; function updateReactiveObject(targetObj, newData){ const rawTarget = toRaw(targetObj); Object.assign(rawTarget, _cloneDeep(newData)); } let complexState = reactive({ items: [{ id: 1 }] }); updateReactiveObject(complexState.items[0], {id: 2}); // 正确触发UI刷新 console.log(JSON.stringify(complexState)); // {"items":[{"id":2}]} ``` 上述代码片段展示了如何安全有效地更新由 `reactive` 构建起来的数据实体而会破坏其应有的交互行为模式[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值