首页 文章

Vuex:跳过动作并直接从Component提交Mutation

提问于
浏览
4

在vue.js应用程序中,使用vuex作为状态管理存储,我只需要在vuex中更改属性的值 . 为此我可以遵循两种方法:

  • 调度一个 action 方法,该方法将进一步提交 mutation ,最终将改变状态 .

  • 第二种方法是直接从组件提交 mutation ,然后变异方法将改变状态 .

目前,我正在使用这样的第一种方法:

In Component:

this.$store.dispatch('updateNotice', 'This is some notice')

In Actions:

updateNotice ({state, getters, commit}, payload) { commit('UPDATE_NOTICE', payload) }

In Mutations:

UPDATE_NOTICE (state, payload) { state.notice = payload }

您可能已经注意到,我只是使用 action 方法提交单个突变,而没有任何其他逻辑或异步功能 .

我的问题是,在这种情况下,我不应该直接从组件本身提交变异吗?什么是最佳做法?由于在这个简单的情况下使用 action 方法似乎很冗长,并没有特定的用途 .

有什么理由我应该始终从组件中采取行动吗?毕竟,在vuex中 ...mapMutations() 有一些理由存在 .

1 回答

  • 4

    在您的情况下,使用 ...mapMutations$store 实例直接在组件中提交突变应该没问题 .

    既然你问过最佳实践,那么存在动作的主要原因就是异步性 . Mutations不能是异步的,而Actions可以是,虽然你可以直接在Component中调用 $store.commit 这将是一个同步事件,但是当你调用 dispatch 时,可以在动作块中异步处理提交,这与Mutations不同 .

    因此,最好的做法是在必须异步处理状态时使用Actions来提交对状态的修改,说在提交状态更改之前需要进行API调用,在这种情况下使用Actions是个好主意 .

相关问题