javascript - 使用命名空间模块中的 mapState 和 mapMutations

标签 javascript vue.js vuex vuex-modules

在将我的 vuex 存储分成三个模块后,我不知道如何访问突变和状态。我尝试了不同的语法,但不确定要遵循什么。

map 状态: 这就是我设置 mapStates 的方式,vendor 和 root 是模块名称。

...mapState({
  vendor: state => state.vendor.vendor,
  language: state => state.root.language
})

并像这样使用它:

console.log(this.vendor);

map 突变: 我想我已经正确设置了mapMutations。

methods: {
  ...mapMutations('vendor', ['UPDATE_VENDOR', 'SET_VENDOR_APISTATE'])
}

并像这样访问它:

this.$store.commit('UPDATE_VENDOR', response.data);

this.UPDATE_VENDOR(response.data);

这些似乎都不适合我,我不知道我做错了什么。

我的商店看起来像这样:

import vendorModule from './vendor/vendorModule';

const store = new Vuex.Store({
  modules: {
    customer: customerModule,
    root: rootModule,
    vendor: vendorModule
  }
});

使用这样的模块:

const vendorModule = {
  namespaced: true,
  state: () => ({
    vendor: null,
    vendorApiState: ENUM.INIT
  }),
  mutations: {
    UPDATE_VENDOR(state, vendor) {
      state.vendor = vendor;
      state.vendorApiState = ENUM.LOADED;
    }
  }
};

export default {
  vendorModule
};

编辑 我意识到我的模块结构错误。正如 Kelvin Omereshone 所写,我在这里使用了错误的语法: this.$store.commit('vendor/UPDATE_VENDOR', response.data);

工作模块结构为:

const state = () => ({
  vendor: null,
  vendorApiState: ENUM.INIT
});

const mutations = {
  UPDATE_VENDOR(state, vendor) {
    state.vendor = vendor;
    state.vendorApiState = ENUM.LOADED;
  }
};

export default {
  namespaced: true,
  state,
  mutations
};

最佳答案

如果您想使用this.$store.commit('UPDATE_VENDOR', response.data);。不需要mapMutations。就像这样使用它:

this.$store.commit('vendor/UPDATE_VENDOR', response.data);

注意:模块名称位于 Mutation 名称之前,以正斜杠分隔 /

关于javascript - 使用命名空间模块中的 mapState 和 mapMutations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62403944/

相关文章:

javascript - 如何在 Canvas 上使运动呈正弦曲线?

javascript - Sourcemap 无法正常工作( browserify + minify )

javascript - vue js 不会立即触发

javascript - 在 Angular 中使用 Vue 组件

vue.js - 为什么即使没有参数也可以在 Vue v-on 方法中访问 "event"?

javascript - 在我的情况下,我想推送输入值并将其存储在本地存储 VUEX 的数组中。我已经尝试过但它不起作用

javascript - 使用 BrowserWindow.webContents.send 在渲染器之间发送大对象时 Electron 失败

javascript - 窗口点匹配媒体

javascript - VueJS : React to State change through mapGetters receiving arguments

javascript - Vuex:从行动中调用 setter/getter