解读vue项目中遇到的深拷贝浅拷贝问题

 更新时间:2023年10月18日 09:45:59   作者:oilpastell  
这篇文章主要介绍了vue项目中遇到的深拷贝浅拷贝问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

vue项目的深拷贝浅拷贝问题

遇到的问题

使用element-ui修改表单文本框的数据时,无论确定还是取消,页面数据都在同步修改

原因:

复杂类型的赋值是浅拷贝,直接赋值 会导致双向修改

解决的方法:

将浅拷贝转换成深拷贝

解决思路:

先把该对象转成字符串(普通数据类型), 就没有引用类型的影响了。再转回对象使用。

转换方式 :

JSON.parse(JSON.stringify(对象))

这里简述下深拷贝浅拷贝的概念

浅拷贝: 将A对象赋值给B对象,修改B对象的属性和方法会影响到A对象的属性和方法。

深拷贝 将A对象赋值给B对象,修改B对象的属性和方法不会影响到A对象的属性和方法。

vue深拷贝、浅拷贝的区别

1、浅拷贝

this.ProductionLineForm = {
    "produeLineName": "产线1",
	"departmentId": 1,
	"produceLineStatus": 0,
	"director": 5,
	"description": "测试产线",
	"keyCraftNodeId":1
}
let productionLineForm = this.ProductionLineForm;
productionLineForm.produeLineName = '修改名称'
console.info('this.ProductionLineForm', this.ProductionLineForm)

查看原form的值:

2、深拷贝

使用JSON.parse(JSON.stringify(要拷贝的对象))。

JSON.stringify()对象转为串,JSON.parse()串转为对象,JSON操作是深拷贝操作。

 this.ProductionLineForm = {
   "produeLineName": "产线1",
   "departmentId": 1,
   "produceLineStatus": 0,
   "director": 5,
   "description": "测试产线",
   "keyCraftNodeId": 1
}
let productionLineForm = JSON.parse(JSON.stringify(this.ProductionLineForm));
productionLineForm.produeLineName = '修改名称'
console.info('this.ProductionLineForm', this.ProductionLineForm)

查看原form的值:

对比发现,浅拷贝,在修改productionLineForm的参数时,原form也被修改。而深拷贝修改参数不会影响原form的值。

注意:

浅拷贝:新对象赋值,只是取的旧对象栈中的值,也就是引用对象的值

深拷贝:会在堆里边开辟一个空间,存放自己的对象值

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Vue3项目刚创建就报错的问题及解决

    Vue3项目刚创建就报错的问题及解决

    这篇文章主要介绍了Vue3项目刚创建就报错的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue2.0 移动端实现下拉刷新和上拉加载更多的示例

    vue2.0 移动端实现下拉刷新和上拉加载更多的示例

    本篇文章主要介绍vue2.0 移动端实现下拉刷新和上拉加载更多的示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • vue中实现千位分隔符的示例代码

    vue中实现千位分隔符的示例代码

    本文主要介绍了vue中实现千位分隔符的示例代码,主要两种方法,一种是某一个字段转换,一种是表格table中的整列字段转换,具有一定的参考价值,感兴趣的可以了解一下
    2023-11-11
  • vue 禁止重复点击发送多次请求的实现

    vue 禁止重复点击发送多次请求的实现

    本文主要介绍了vue 禁止重复点击发送多次请求的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • vue+el-table点击表头实现改变其当前样式

    vue+el-table点击表头实现改变其当前样式

    这篇文章主要介绍了vue+el-table点击表头实现改变其当前样式问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • element-ui如何在table中使用tooltip

    element-ui如何在table中使用tooltip

    这篇文章主要介绍了element-ui如何在table中使用tooltip问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • 浅谈VUE uni-app 核心知识

    浅谈VUE uni-app 核心知识

    这篇文章主要给大家介绍了关于uniapp的核心知识,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-10-10
  • vant 自定义 van-dropdown-item的用法

    vant 自定义 van-dropdown-item的用法

    这篇文章主要介绍了vant 自定义 van-dropdown-item的用法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • vue2.x element-ui实现pc端购物车页面demo

    vue2.x element-ui实现pc端购物车页面demo

    这篇文章主要为大家介绍了vue2.x element-ui实现pc端购物车页面demo,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Vue实现图片与文字混输效果

    Vue实现图片与文字混输效果

    用多了 JQuery ,习惯了使用JQuery的API操作 DOM ,几乎忘记了原生JS对DOM操作,今天在项目中遇到了文字和图片混输的情况,小编给大家分享Vue实现图片与文字混输效果,感兴趣的朋友一起看看吧
    2019-12-12

最新评论