首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >突变一个prop对象的数据副本比突变一个支柱更好吗?为什么?

突变一个prop对象的数据副本比突变一个支柱更好吗?为什么?
EN

Stack Overflow用户
提问于 2019-07-01 16:36:27
回答 1查看 754关注 0票数 1

在Vue文档中有一个关于单向数据流的部分:https://v2.vuejs.org/v2/guide/components-props.html#One-Way-Data-Flow

在这里,它解释了你不应该变异一个道具。此外,它还说:

该支柱用于传递初始值;子组件希望随后将其用作本地数据属性。在这种情况下,最好定义使用支柱作为初始值的本地数据属性:

在本节的末尾,有一条注释说:

请注意,JavaScript中的对象和数组是通过引用传递的,因此,如果支柱是数组或对象,那么在子组件中突变对象或数组本身将影响父级状态。

我正在考虑的情况是,您有一个作为对象(或数组)的支柱,并且定义了一个本地数据属性,该属性使用该支柱作为它的初始值:

代码语言:javascript
运行
复制
props: {
        initialMyObject: {
            type: Object,
            required: true
        }
    },

data() {
    return {
        myObject: this.initialMyObject
    }
}

如果我对数据项myObject进行变异,因为它是一个对象,所以道具本身最终会发生变异。因此,这在本质上是否等同于“突变道具”,并应加以避免?在这种情况下,当需要对对象进行更改时(或者使用Vuex),是否最好发出一个事件?

提前感谢你在这方面的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-02 07:02:29

你可以简单地复制它-

代码语言:javascript
运行
复制
data() {
    return {
        myObject: {...this.initialMyObject}
    }
}

为了避免它。

但是是的,你不能把一个值重新分配给一个prop

这只是因为Object是一种参考内存。当数组或对象存储在任何变量中时,它是一个引用变量。

在这种情况下,内存管理,引用变量将指向堆中的内存地址,因此您可以添加更多的n个值来处理。但是,即使使用新地址,也不能将该地址替换为任何新值。

在我的偏好中,只要您想要更新整个项目的值,您应该更喜欢Vuex

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56839270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档