自从5月19号来北京工作后,一直忙于工作和学习之间,一直没有写一些总结,看来还是要把这个习惯坚持下来。
今天遇到的问题是我之前做了一个简单商城项目,因为用了vue,业务逻辑也比较简单,没有什么好总结的,现在这个项目要迭代二期,就遇到问题了。在之前的商场,只有一个主页(即商品页),我就把购物写在主页当中,交上去了。也一直运行了两个多月,之后没有什么改动,但在第二期的时候,添加了商品介绍页,而这个页也有购物车,为了能复用,我单独把这个购物车抽成了一个组件。
抽出来之后。我就遇到了技术实现业务上的逻辑问题,在主页,能添加任意一款商品到购物车的列表里,到商品介绍页,也能把当前的商品添加进去。这就需要一个公共的数据,
之前是把列表做成一个由数组组成的对象,然后传给子组件购物车,然后在购物车中做列表的删除工作(也就是我不想这个商品了。直接删除),不知道这个是有意还是自己无意写的,在一次删除过程中,无意也发现了父组件的列表数据也跟着变了,虽然不懂原理,但是也解决我目前的困境,就把商品介绍页做成一个组件放到主页中(虽然可能有设计上的不合理,但是先完成工作再考虑)。在点击商品时,主页隐藏,介绍页显示,声明一个变量赋值当前的商品,在介绍页点击添加到购物车时,把当前的变量push到购物车列表中。这样暂时满足我的需求。(哎,小高兴了一把)
回到家后,我就对今天遇到的问题产生了疑问,为什么我在子组件中改变数据,父组件的数据也改变了。vue中不是说有单向数据流的概念,子组件是不允许直接改变父组件的数据,而我实现了一个,居然没有报错,不知道为什么
回到家中,问了一下我老弟,老弟直接说了一句话,传值就是赋值,而是一个对象,对象的赋值其实是引用,你改变了引用对象,当然都会变。
猛地一说,把我说醒了,举个例,把一个对象赋值给A。然后A赋值给B,把B这个对象改变时,那么A这个对象也变得和B一样。我改变的是这个引用的对象,而不是只是改变了B。
用vue的话来说,我改变子组件的值,而这个值是父组件里面的值赋值过来的,是一个对象,那么子组件的值就是这个的引用对象,我改变了这个值,也就变相的改变了父组件的值。
那么开脑洞了,如果我不想让子组件这样随意的改变父组件的值,那怎么做那,一个概念就出来,就是对象的深拷贝。
哈哈,这个对我来说是一个新的概念,我要去搜搜资料来写一篇文章总结下。明天来写一下,可能写的不好,请不要见笑