vue组件间传递对象的深拷贝

浅拷贝:内存内同一个地址指向了两个变量,其中一个变量数据的改变都会影响这个地址内存储内容的改变。
我们在vue组件间传递对象的时候,不能浅拷贝,应该将内存拷贝出去,使得另一个地址指向obj2,这就是深拷贝。深拷贝之后两个变量拥有相同的内容,但是内存地址不一样,互不影响。

实现深拷贝
var obj2 = JSON.parse( JSON.stringify(obj1) )

缺点:没有办法深拷贝函数。

vue组件间传递对象的实现深拷贝

需求:在使用 vuex 管理状态和数据的过程中,有一些对于数据列表的增删改的操作,每当完成这些操作后页面需要跳转到某个页面。
方法:使用 watch 监听数据列表,一旦监测到数据列表变化就跳转。
在实际过程中,数据的增减确实是可以引发跳转行为,但是列表项是对象,某个属性的更改则不会引发跳转。

解决方法:对监听对象进行深拷贝
// vuex/index.js
update(state,instance){
    // 通过 instance 的 id 找到
    let lists = JSON.parse(JSON.stringify(state.lists))
    let index = lists.findIndex(item =>{
        return item.id === instance.id
    })
    lists[index] = instance
    state.lists = lists
},

你可能感兴趣的:(vue组件间传递对象的深拷贝)