vue深浅拷贝

138 阅读1分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第7天,点击查看活动详情

今天来浅浅探讨一下,vue中深浅拷贝的问题。

最近在做项目的过程中,就遇到深浅拷贝的问题,我在数据传递的过程中,只是使用了'='传值(也就是浅拷贝),这就导致页面上数据的异常变动。

问题现象

image.png

就是这样的一个最常见的table,我们经常会对它进行数据的修改。修改如下:

image.png 然后错误的方法是,直接将行元素对象row直接用等号赋值给编辑框内的form的ref。这样的话,你在进行修改的过程中,就会出现,你一边在修改信息,外层table里的信息也在变动。如下:

image.png

解决办法

也就如何实现深拷贝的办法。查阅了资料之后,我们的实现方法如下:

state.detialForm = JSON.parse(JSON.stringify(row))

原理:用json.stringify()将对象或数组转化成json字符串,再用json.parse()把字符串转换成JavaScript对象。

这种方法虽然可以实现数组或对象深拷贝,但不能处理函数。

浅拷贝与深拷贝区别

深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的

深拷贝和浅拷贝的示意图大致如下:

浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象。