【发布时间】:2018-10-03 11:51:48
【问题描述】:
在 vue.js 应用程序中,使用 vuex 作为状态管理存储,我需要简单地更改 vuex 中属性的值。为此,我可以采用两种方法:
调度一个
action方法,该方法将进一步提交mutation,最终将改变状态。第二种方法是直接从组件中提交
mutation,然后mutation方法会改变状态。
目前,我正在使用这样的第一种方法:
在组件中:
this.$store.dispatch('updateNotice', 'This is some notice')
在行动中:
updateNotice ({state, getters, commit}, payload) {
commit('UPDATE_NOTICE', payload)
}
在突变中:
UPDATE_NOTICE (state, payload) {
state.notice = payload
}
您可能已经注意到,我使用 action 方法只是为了提交 single 突变,没有任何其他逻辑或 async 功能。
我的问题是,在这种情况下,我不应该直接从组件本身提交突变吗?最佳做法是什么?因为在这个简单的例子中使用action 方法看起来很冗长并且没有特定的目的。
有什么理由我应该始终 commit 来自组件的操作?
毕竟,在 vuex 中,...mapMutations() 有一些存在的理由。
【问题讨论】:
-
我直接在组件中使用突变(和需要时的操作),因为使用“仅操作”我添加了一个不需要且必须读取的层。
-
在这种情况下没有理由不直接使用突变。在official Vuex doc 中有一个名为
Committing Mutations in Components的部分。预计直接在组件中提交突变。 -
更多细节也可以在这里找到:github.com/vuejs/vuex/issues/587
标签: javascript vue.js vuejs2 vue-component vuex