如何从组件访问 Vuex 模块操作

Posted

技术标签:

【中文标题】如何从组件访问 Vuex 模块操作【英文标题】:How to access Vuex module actions from a component 【发布时间】:2017-11-20 08:46:14 【问题描述】:

我定义了一个包含两个模块的商店,我正在尝试访问一个模块操作,我尝试这样做

this.$store.dispatch('load');

但我明白了:

[vuex] 未知动作类型:加载

我尝试了另一个选项,我在 google 中找到的东西,但没有任何效果,访问模块操作的正确方法是什么?

这是我的代码:

Vuex 定义:

let session = require('./store/session.js');
let options = require('./store/options.js');
const store = new Vuex.Store(
    modules: 
        session: session,
        options: options,
    ,
);

options.js

 export default 
    state: 
        data: null,
    , 
    mutations: 
        setOptions (state, payload) 
            console.log(payload);
         
    ,
    actions:  
        load(  commit ) 
            $.getJSON('options')
            .then(function (data) 
                commit('setOptions', data);
            );
        
    ,
    getters: 

    


和我的应用组件:

export default 
    beforeCreate() 
         this.$store.dispatch('load');
    

我的 vue 构建:

new Vue(
    el: "#app",
    router,
    store,
    render: h => h(App)
);

【问题讨论】:

如果你在console.log(this.$store) 中加入beforeCreate() 钩子会发生什么?应该有一个 _actions 对象来显示所有可用的操作。 @visevo 该属性中没有属性,但是当我导入选项时它可以工作 【参考方案1】:

我会考虑使用 vuex 的 mapActions 助手。这方面的文档可以在https://vuex.vuejs.org/guide/actions.html#dispatching-actions-in-components 找到。

本页示例如下:

import  mapActions  from 'vuex'

export default 
  // ...
  methods: 
    ...mapActions([
      'increment', // map `this.increment()` to `this.$store.dispatch('increment')`

      // `mapActions` also supports payloads:
      'incrementBy' // map `this.incrementBy(amount)` to `this.$store.dispatch('incrementBy', amount)`
    ]),
    ...mapActions(
      add: 'increment' // map `this.add()` to `this.$store.dispatch('increment')`
    )
  

【讨论】:

【参考方案2】:

我解决问题 而不是做

 let options = require('./store/options.js');

我做到了:

import options from './store/options.js'

现在可以了

【讨论】:

太棒了,我应该明白的。

以上是关于如何从组件访问 Vuex 模块操作的主要内容,如果未能解决你的问题,请参考以下文章

在另一个模块操作中获取 vuex 模块状态

如何从另一个 vuex 模块访问 getter?

如何使用 Quasar 框架访问 Vuex 存储模块操作中的 Vue 路由器?

Vuex 在组件中存储模块状态访问

无法在模块之外访问 Vuex getter

如何发布带有 Vuex 模块的 Vue.js NPM 包?