我正在尝试将现有的 Vuex 状态转换为模块。我正在尝试使用这样的模块:
const moduleA = {
state: {},
mutations: {
update (state, payload) { // payload is an object
state = payload // doesn't work
}
},
我正在注册模块:
const store = new Vuex.Store({
modules: {
a: moduleA,
b: moduleB
}
})
问题是:是否可以像我尝试做的那样在不嵌套的情况下使用状态?或者唯一的方法是拥有类似的东西:
const moduleA = {
state: {
one: {}
},
mutations: {
update (state, payload) {
state.one = payload // it works
},
},
}
理想情况下,我希望拥有与之前相同的结构,并且能够将状态作为 state.a
而不是 state.a.one
谢谢
最佳答案
是的,您可以——只需将模块重构为单独的文件,然后使用索引文件将它们整合在一起:
import Vue from 'vue'
import Vuex from 'vuex'
import users from './store.users.js'
import entries from './store.entries.js'
Vue.use(Vuex)
const store = new Vuex.Store({
modules: {
users,
entries
}
})
export default store
然后在每个模块的文件(例如 store.entries.js
)中,您可以遵循您熟悉的模式,但将 namespaced
设置为 true:
const module = {
namespaced: true,
state: {},
getters: {},
mutations: {},
actions: {}
}
module.actions.update = ({ commit, state }, payload) => {
// commit, state, etc refer to the local store
}
export default module
对于使用store的文件,可以导入索引,然后按模块调用:
import store from '../stores/store.index.js'
// ...
store.dispatch('entries/update', payload)
关于vue.js - 如何在没有嵌套对象的情况下使用 Vuex 模块状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46934162/