vue项目中遇到这样一个问题:触发子组件的一个事件,事件中emit触发父组件的自定义事件,向父组件发送了一个数组;在父组件中的自定义事件中拿到这个数组之后,赋值给定义在data中的一个变量,然后用这个变量去渲染了一个列表;整个代码中从头到尾子组件只emit了一次,也就是说父组件只接受了子组件的数组一次,拿到后也只给data赋值了一次;但问题来了,我修改子组件的数组内容(push,splice),父组件中的列表也跟着变了,这什么情况?然后我写了个demo,发现如果传的是个数值或字符串,在子组件中修改,父组件中的内容不会变...有遇到此类问题的人吗?求解答
2 回答
暮色呼如
TA贡献1853条经验 获得超9个赞
因为数组是引用类型,数值or字符串是基本类型,引用类型的更改会引起连锁反应,你如果实在不想改的话,就在emit的时候深拷贝一份给父组件比如数组为arr,emit的时候不直接传递arr,而是传递JSON.parse(JSON.stringify(arr))这个值,就可以了,当然实现深拷贝的方法有很多种,这只是其中一种
添加回答
举报
0/150
提交
取消