使用 Vuex 突变更新对象引用的正确方法是什么?

2024-02-02

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

这是合法的吗?这似乎有点太简单了,而且接近冗余(因为我可以在组件本身中进行重新分配),除了现在可以跟踪突变。

另一种方法是将对象标识符作为有效负载的一部分传递,并获取突变以搜索存储并检索它。如果我没有太多的话,我不想做这项工作。


我们可以认为它是一种魔法或一种恩赐,但这就是 vue 的工作方式(简单、清晰和直观),感谢 Evan 和团队。

如果您来自 React 或 Angular,您可能会认为这太简单了,并且可能不相信它的合法性。但相信我,这就是 vue 的酷之处。

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

首先你会看到这个

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

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

突变遵循 Vue 的反应性规则由于 Vuex 存储的状态是由 Vue 做出响应式的,因此当我们改变状态时,观察状态的 Vue 组件将自动更新。

提交突变的全部意义在于,当您提交突变时,它不会让状态发生变化。

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

_withCommit() 所做的就是设置一个标志 this._committing true 然后执行突变代码(并返回 _committing 执行后为 false)。

然后,Vuex 存储会监视状态的变量,如果它 注意到(又名观察者触发器)变量在 _committing 标志为 false,它会引发警告。

您可以阅读有关为什么不直接更改状态的更多信息answer https://stackoverflow.com/questions/49122648/vuex-is-it-possible-to-directly-change-state-even-if-not-recommended

那么更新对象的最佳方法是什么。

  1. 带负载的调度操作(可选)
  2. 操作通过有效负载进行突变
  3. 突变用有效负载更新对象。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Vuex 突变更新对象引用的正确方法是什么? 的相关文章

随机推荐