组件是不是应该直接提交突变?

Posted

技术标签:

【中文标题】组件是不是应该直接提交突变?【英文标题】:Should a component commit a mutation directly?组件是否应该直接提交突变? 【发布时间】:2018-09-14 23:23:39 【问题描述】:

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

它也说

您可以使用 this.$store.commit('xxx') 在组件中提交变更

那么问题来了,在 vuex 中直接从一个组件(而不是通过一个动作)提交一个突变好吗?

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

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

【问题讨论】:

Is it bad to commit mutations without using actions in Vuex?的可能重复 【参考方案1】:

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

我不知道您的图表在哪个上下文中,但是可以从任何地方(组件、服务、操作、getter 等)调用突变,然后通过同步更新存储来很好地完成它的工作。

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于组件是不是应该直接提交突变?的主要内容,如果未能解决你的问题,请参考以下文章

Vuex |如何在模块操作中提交全局突变?

突变未提交状态 vuex - Nuxt

提交突变后 Apollo 数据对象为空

使用突变响应更新 apollo 客户端

GCP Datastore Python - InvalidArgument:400 非事务性提交可能不包含影响同一实体的多个突变

Relay.Store.commitUpdate 从不提交