组件应该直接提交变更吗?

Should a component commit a mutation directly?

Mutations 章节中,您可以看到一个使用 mapMutations 将突变映射到组件方法的示例。

它还说

You can commit mutations in components with this.$store.commit('xxx')

那么问题来了,在 vuex 中直接从组件(而不是通过 action)提交 mutation 好吗?

如果是,则此图可能需要更新:

我应该继续使用 mapMutations 方法吗?

MapMuation 只是一个帮助程序,可让您使用定义的突变(在 mutation-types 中)作为组件的方法。它与 $store.commit 完全相同,但符号更简单。

我不知道你的图表在哪个上下文中,但可以从任何地方调用突变(组件、服务、动作、吸气剂等...)en 将通过同步更新商店来很好地完成它的工作。

据我了解,actions 主要用于可能包含多个 mutations 的异步操作。所以是的,直接使用突变是可以的,这就是它们的目的。只有当你有涉及多个突变的更复杂的工作流程时,你才应该将它们包装在一个动作中。