vue3响应式数据关联性

将从后台获取的数据(ret.dataList)赋值给多个响应式数据(publicData.expList1,publicData.expList2...)后,只要响应式数据其中任意一个数据无论通过任何方式发生变化,其它数据都会做相同变化。

这个现象说明,赋给响应式数据的是一个地址而不是 纯值,所以这几个响应式数据是相互关联的。若想去除关联影响,可以循环遍历后台数据,将元素push到响应式数据里。

 

exmple:
let publicData = reactive({
    expList1: [],
    expList2: [],
    ...
    expListn: [],
})

http.servRequest((ret)=>{
    if(ret.dataList.length) {
        ret.dataList.map((item)=>{
            publicData.expList1.push(item)
            publicData.expList2.push(item)
            ...
            publicData.expListn.push(item)
        })
    }
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue 使用 `JSON.parse(JSON.stringify(obj))` 来深拷贝响应式数据。但是,这种方法会丢失对象的响应式性质,因此需要使用 Vue.set(target, key, value) 或 Vue.delete(target, key) 来重新设置响应式性质。 如果数据量很大,建议使用第三方库进行深拷贝,如 lodash 中的 _.cloneDeep() 方法。 ### 回答2: 在Vue中,拷贝响应式数据可以使用`JSON.parse(JSON.stringify())`的方法。 Vue中的响应式数据是通过Vue响应式系统进行管理的,当数据发生变化时,相关的视图会自动更新。然而,有时我们需要对响应式数据进行拷贝,这可能是为了进行深层次的修改或者为了保留数据的原始状态等目的。 在拷贝响应式数据时,直接使用常见的拷贝方法(如`Object.assign()`、`slice()`等)可能会导致新的对象失去响应式功能,也就是说对新对象的修改不会触发相关视图的更新。 为了避免这个问题,我们可以使用`JSON.parse(JSON.stringify())`的方法来进行拷贝。该方法会将对象转换为字符串,然后再将字符串转换回对象,这样可以得到一个全新的对象,而且这个对象不再具有响应式功能,但可以进行普通的数据操作。 示例代码如下: ```javascript var originalData = { name: '张三', age: 18 }; var copiedData = JSON.parse(JSON.stringify(originalData)); copiedData.name = '李四'; console.log(originalData); // 输出:{ name: '张三', age: 18 } console.log(copiedData); // 输出:{ name: '李四', age: 18 } ``` 需要注意的是,使用`JSON.parse(JSON.stringify())`进行拷贝时,只能处理简单的对象或数组,对于复杂的对象(例如包含函数、正则表达式等),可能会出现意料之外的结果。因此,在进行拷贝操作时,需要谨慎选择合适的方法来保证数据的完整性和正确性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值