Vue数据操作:如何在对象拷贝中正确选择深拷贝或浅拷贝?

在编辑表单时,直接复制row对象给弹窗导致两者共享同一内存,未保存的编辑会影响原始数据。问题在于浅拷贝,而非深拷贝。使用lodash的cloneDeep实现深拷贝以解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

场景复现:我们在对一个表单进行编辑时候,编辑完内容,并没有保存的时候,点击关闭,这个时候我们的表单的该字段也随着我们的编辑而改变了,但是这个值并没有被真正被保存到数据库。

d443de8371554c44b8f052d7801b7b13.png

然而会出现下面这种情况:

0a7de2b7fbe0453f91a8c9fb9fae45a7.png 随着我们刷新页面这条数据会正常显示。但是这也算是一个bug。

bug发生的原因:

8bed999acc53445798ac66b00a32d6bd.png

 我们在编辑表单的时候,直接将row对象复制给了弹窗需要的对象,这个时候这俩个对象任意一个的属性内容发生改变的话,另一个也会伴随着变化。这是因为两个对象引用了同一个对象。

这就是所谓的浅拷贝:只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存 

深拷贝:创造一个一模一样的对象,修改对象不会影响到原对象.

用lodash实现深拷贝

引入lodash.js文件。

import _ from '@/utils/lodash'; //引入
this.ruleForm = _.cloneDeep(row);  //深拷贝

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jamie Chyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值