我们都知道父组件给子组件传值可以用props,那么props有什么坑呢?
一、单向数据流。
vue中,为了数据不混乱,所以它是单向数据流的方式。及父组件传值给子组件,希望这个动作是单向的,不因子组件改变父组件传过来的值,而影响到父组件的值。所以官方强烈不推荐子组件直接改变props的值。
二、js里面的基本数据类型,和引用数据类型在props里面的坑。
首先 我们知道基本数据类型存在栈内存中,引用数据类型存在堆内存中(然后将其堆内存地址存在栈内存中)。这句话不懂可以去补这方面的知识。
所以,如果我们在子组件中强行改变props里面的值,且这个值是基本数据类型,比如字符串,那么vue 会报错。因为我们前面说过vue强烈不推荐子组件直接改props的值。
但是,如果我们在子组件中强行改变props里面的值,且这个值是引用数据类型,比如对象,那么vue会正常运行。但是你子组件改变这个值,父组件会相应的改变,这个坑你可以用来妙用(比如通信),但也有可能会影响你的业务逻辑。所以你要知道这个坑。为什么引用数据类型会这样?是因为引用数据类型改变的是堆内存空间里的值,它欺骗过了vue 的机制,所以vue不会报错,但因为他和父组件的值共用一个堆内存地址,所以父组件相应改变。
三、如何解决引用数据类型影响父组件?
你可以在计算属性中用Object.assign()将props的值进行重新计算。
网友评论