如果动作是唯一操纵商店价值的过程,那么他们可以直接做,还是必须始终使用变异?动作可以直接设置变量的值吗?没有涉及异步事件,只有计算。
简单的例子...
actions: {
resetToZero (state) {
state.amount = 0
state.display = ''
state.color = black
}
谢谢 布莱恩
答案 0 :(得分:0)
这是错误的,“ ...操作是唯一操作商店值的过程”。
在Vuex存储中实际更改状态的唯一方法是提交突变。
如果需要,动作可以进行突变:
actions: {
increment ({ commit }) {
commit('increment')
}
}
如果需要,我们还可以从组件进行突变:
this.$store.commit('increment')
要回答您的问题:是的,如果必须更改状态,则必须始终提交一个突变(使用突变)。话虽如此,我认为vuex不会阻止您直接从操作更改状态,但这不是最佳实践。甚至不是最佳实践,您正在错误地使用vuex存储。另外,您将失去跟踪所有状态正在更改的位置的好处(这就是存在突变的原因)。
操作仅用于业务逻辑(计算),异步调用(操作不必包含异步调用)和提交突变(如果需要)。突变仅用于更改状态(突变中应该没有逻辑)。
您给出的示例resetToZero
没有逻辑,只改变了状态。这是vuex存储的不正确使用。因此,您需要将resetToZero
移动到突变。而且,无论何时需要resetToZero
,都需要commit('resetToZero')
。
此帖子可能会帮助您: Vuex Action vs Mutations