在Vue文档中有一个关于单向数据流的部分:https://v2.vuejs.org/v2/guide/components-props.html#One-Way-Data-Flow。
在这里,它解释了你不应该变异一个道具。此外,它还说:
该支柱用于传递初始值;子组件希望随后将其用作本地数据属性。在这种情况下,最好定义使用支柱作为初始值的本地数据属性:
在本节的末尾,有一条注释说:
请注意,JavaScript中的对象和数组是通过引用传递的,因此,如果支柱是数组或对象,那么在子组件中突变对象或数组本身将影响父级状态。
我正在考虑的情况是,您有一个作为对象(或数组)的支柱,并且定义了一个本地数据属性,该属性使用该支柱作为它的初始值:
props: {
initialMyObject: {
type: Object,
required: true
}
},
data() {
return {
myObject: this.initialMyObject
}
}
如果我对数据项myObject
进行变异,因为它是一个对象,所以道具本身最终会发生变异。因此,这在本质上是否等同于“突变道具”,并应加以避免?在这种情况下,当需要对对象进行更改时(或者使用Vuex),是否最好发出一个事件?
提前感谢你在这方面的帮助。
发布于 2019-07-02 07:02:29
你可以简单地复制它-
data() {
return {
myObject: {...this.initialMyObject}
}
}
为了避免它。
但是是的,你不能把一个值重新分配给一个prop
这只是因为Object
是一种参考内存。当数组或对象存储在任何变量中时,它是一个引用变量。
在这种情况下,内存管理,引用变量将指向堆中的内存地址,因此您可以添加更多的n个值来处理。但是,即使使用新地址,也不能将该地址替换为任何新值。
在我的偏好中,只要您想要更新整个项目的值,您应该更喜欢Vuex
。
https://stackoverflow.com/questions/56839270
复制相似问题