Vuex:动作必须始终使用变异吗?

时间:2018-10-24 21:03:35

标签: action vuex

如果动作是唯一操纵商店价值的过程,那么他们可以直接做,还是必须始终使用变异?动作可以直接设置变量的值吗?没有涉及异步事件,只有计算。

简单的例子...

actions: {
    resetToZero (state) {
    state.amount = 0
    state.display = ''
    state.color = black
    }

谢谢 布莱恩

1 个答案:

答案 0 :(得分:0)

这是错误的,“ ...操作是唯一操作商店值的过程”。

  

在Vuex存储中实际更改状态的唯一方法是提交突变。

如果需要,动作可以进行突变:

actions: {
  increment ({ commit }) {
    commit('increment')
  }
}

如果需要,我们还可以从组件进行突变:

this.$store.commit('increment')

要回答您的问题:是的,如果必须更改状态,则必须始终提交一个突变(使用突变)。话虽如此,我认为vuex不会阻止您直接从操作更改状态,但这不是最佳实践。甚至不是最佳实践,您正在错误地使用vuex存储。另外,您将失去跟踪所有状态正在更改的位置的好处(这就是存在突变的原因)。

操作仅用于业务逻辑(计算),异步调用(操作不必包含异步调用)和提交突变(如果需要)。突变仅用于更改状态(突变中应该没有逻辑)。

您给出的示例resetToZero没有逻辑,只改变了状态。这是vuex存储的不正确使用。因此,您需要将resetToZero移动到突变。而且,无论何时需要resetToZero,都需要commit('resetToZero')

此帖子可能会帮助您: Vuex Action vs Mutations