Vue.js 使用Vuex变异更新对象引用的正确方法是什么?

Vue.js 使用Vuex变异更新对象引用的正确方法是什么?,vue.js,vuex,Vue.js,Vuex,将对象引用传递给Vue子组件时,我想更新对象属性之一的值(使用Vuex),最简单的方法是将对象引用和新值传递给子组件。然后,变异只会更新传递对象的属性 这合法吗?这似乎有点太容易了,而且近乎多余(因为我可以在组件本身中进行重新分配),只是现在可以跟踪突变 另一种方法是将对象标识符作为有效负载的一部分传递,并获取变异以搜索存储并检索它。我不喜欢做这项工作,如果我没有太多。< /P> < P>很好地认为它是一个魔术或恩惠,但这是如何VUE工作(简单,清晰和直观)感谢埃文和团队。 如果你来自React

将对象引用传递给Vue子组件时,我想更新对象属性之一的值(使用Vuex),最简单的方法是将对象引用和新值传递给子组件。然后,变异只会更新传递对象的属性

这合法吗?这似乎有点太容易了,而且近乎多余(因为我可以在组件本身中进行重新分配),只是现在可以跟踪突变


另一种方法是将对象标识符作为有效负载的一部分传递,并获取变异以搜索存储并检索它。我不喜欢做这项工作,如果我没有太多。< /P> < P>很好地认为它是一个魔术或恩惠,但这是如何VUE工作(简单,清晰和直观)感谢埃文和团队。 如果你来自React或Angular,你可能会认为这太容易了,可能不会相信它的合法性。但相信我,这就是vue有多酷

让我解释一下为什么不能直接改变突变

首先,你会收到这样的问候

错误:[vuex]不要在变异处理程序之外变异vuex存储状态。 断言

在不发生突变的情况下更新状态是一种不好的做法,因为Vuex状态在反应性方面与Vue组件数据类似

突变遵循Vue的反应性规则 由于Vue会使Vuex存储区的状态变为被动状态,因此当我们改变该状态时,观察该状态的Vue组件将自动更新

它的全部意义在于,当你进行变异时,它不会让状态改变

在Store.commit()的代码中,它通过一个_withCommit()内部函数执行变异代码

这个_withCommit()所做的就是设置一个标志 true,然后执行变异代码(并返回_) 执行后为false)

然后,Vuex存储将监视状态的变量,如果 注意(也称为观察者触发器)变量在 _提交标志为false,它抛出警告

您可以阅读更多关于为什么不直接更改状态的信息

那么,更新对象的最佳方式是什么呢

  • 带有效负载的调度操作(可选)
  • 使用有效负载执行操作
  • 变异使用有效载荷更新对象

  • 在阅读了我要问的Vuex问题后,你是在寻求解释,还是只是在争论和不同意;如果您不能满足以下反应性规则;只需使用spread为您的状态返回新对象。state.items=[…state.items]。不确定它的性能是否友好。那么,替换状态中已定义的整个对象的正确方法是什么呢?@claudekennilol在一个变种中只是用新对象重新分配状态属性。这是简单、直观和正确的方法。这就是为什么我喜欢使用vue(x)。@ankit kumhar ojha当我在突变中这样做(即
    state.whatever=newwhater
    )时,它会丢失已设置的观察程序。@claudekennilol-来自vuex文档:“使用vue.set(obj,'newProp',123),或者用新对象替换该对象……”,