vue.js - 如何在没有嵌套对象的情况下使用 Vuex 模块状态?

标签 vue.js state vuex

我正在尝试将现有的 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/

相关文章:

vue.js - 没有值的自定义属性名称 - Vue.js

javascript - Reactjs 在 setState 不起作用后将值作为 Prop 传递

javascript - 使用 ReactJS 显示新的列表项 onclick

javascript - vuex中的数据如何设置初始值?

javascript - Vue js Ready 功能未触发

html - Vue.js Markdown 过滤器

reactjs - React Hooks,如何实现useHideOnScroll hook?

javascript - 使用 Vuex 在 Vue 应用程序中高效地处理大型数据集

vue.js - 对于 Vuex Store 中的每个项目,分配一个分数(基于计算),然后按分数排序

javascript - 使用下拉选择数据Vue js