解读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的值。

注意:

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

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

总结

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

相关文章

  • vue如何实现本项目页面之间跳转

    vue如何实现本项目页面之间跳转

    这篇文章主要介绍了vue如何实现本项目页面之间跳转,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • 解决vue页面刷新产生白屏的问题

    解决vue页面刷新产生白屏的问题

    这篇文章主要介绍了解决vue页面刷新产生白屏的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • vue 防止多次点击的实践

    vue 防止多次点击的实践

    本文主要介绍了vue 防止多次点击,可以有效防止恶意点击,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • vue嵌套组件传参实例分享

    vue嵌套组件传参实例分享

    这篇文章主要介绍了vue嵌套组件传参实例分享,本文以一个vue递归组件为例,探究多层嵌套后事件无法触发的问题,我们可以通过查看一Demo,便于快速了解,下文列举例子需要的小伙伴可以参考一下
    2022-04-04
  • 详解基于mpvue的小程序markdown适配解决方案

    详解基于mpvue的小程序markdown适配解决方案

    本篇文章主要介绍了详解基于mpvue的小程序markdown适配解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Vue 组件如何模块化抽离Props

    Vue 组件如何模块化抽离Props

    这篇文章主要介绍了Vue 组件如何模块化抽离Props的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-11-11
  • vue3自定义确认密码匹配验证规则的操作代码

    vue3自定义确认密码匹配验证规则的操作代码

    这篇文章主要介绍了vue3自定义确认密码匹配验证规则的操作代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • Element Badge标记的使用方法

    Element Badge标记的使用方法

    这篇文章主要介绍了Element Badge标记的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 解决在Vue中使用axios用form表单出现的问题

    解决在Vue中使用axios用form表单出现的问题

    今天小编就为大家分享一篇解决在Vue中使用axios用form表单出现的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-10-10
  • 富文本编辑器vue2-editor实现全屏功能

    富文本编辑器vue2-editor实现全屏功能

    这篇文章主要介绍了富文本编辑器vue2-editor实现全屏功能,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-05-05

最新评论