改变在有效载荷中传递的 Vuex 数组

Posted

技术标签:

【中文标题】改变在有效载荷中传递的 Vuex 数组【英文标题】:Mutate Vuex array passed in the payload 【发布时间】:2021-05-26 01:00:39 【问题描述】:

接下来两种方法的技术区别是什么?示例很简单,但是当我有巨大的嵌套对象时,我需要传递大量 ID 才能在突变中找到所需的对象。

在第二个示例中,我传递一个数组并对其进行变异。同样,从技术上讲,在这两个示例中,我们调用了相同的 push 方法。我对吗?应该是一样的。

const state = () => (
  cards: []
);

mutations: 
  addCard(state, card) 
    state.cards.push(card)
  


// Component...

this.$store.commit('addCard', ...card);

const state = () => (
  cards: []
);

mutations: 
  addCard(state, data) 
    data.cards.push(data.card)
  


// Component...

this.$store.commit('addCard',  cards: this.$store.cards, card: ...card ); 

【问题讨论】:

第二块无效。突变定义不应该有 3 个参数。也许你错过了一些解构大括号。 【参考方案1】:

技术上有什么区别...?

我知道您不是在问两者之间的字面区别是什么,但我会先说清楚。

在第一个 sn-p 中,您将传递一个新项目并将其添加到您通过突变的 state 参数访问的数组状态。 在第二个 sn-p 中,您同时传递数组状态和项,并改为通过有效负载访问数组。

再次,从技术上讲,在这两个示例中,我们调用了相同的推送方法。我说的对吗?

是的,这两个实现了完全相同的结果。数组状态,无论是通过突变参数还是通过有效负载访问,都是完全相同的对象(即===)。

第二个 sn-p 中的模式在改变深度嵌套状态时非常有用,就像你发现的那样。缺点是,对于以后尝试学习您的代码的人来说,可能不太清楚发生了什么变异。

【讨论】:

谢谢!第二个答案是我一直在寻找的。关于缺点的好点,但我发现它对于深度嵌套状态非常有用。 不客气。是的,它很有用。而对于一个小型的个人项目,应该没问题。对于大型团队协作,这对于研究商店代码的团队成员来说可能是个问题。他们会偶然发现这种突变并且不知道它的真正作用。但是,如果它足够有用,一些好的文档可能会消除这种担忧。

以上是关于改变在有效载荷中传递的 Vuex 数组的主要内容,如果未能解决你的问题,请参考以下文章

vuex中更新对象或数组的值页面不更新的问题

如何循环遍历传递给具有 Vuex 存储和计算属性的组件的对象数组?

vuex 中操作数组,报错 Do not mutate vuex store state outside mutation handlers

如何管理 Vuex Store 中的嵌套数组并通过组件传递

Vuex,在动作中改变状态

不要在突变处理程序之外改变 vuex 存储状态