首页 文章

错误TypeError:无法在app.js:12012读取未定义的属性'dispatch'

提问于
浏览
2

嗨我一直在尝试学习vuejs和vuex,同时试图通过vix概念从api调用得到响应我得到了以下错误 . 请帮助 . 发生此错误
错误TypeError:无法在app.js:12012读取未定义的属性'dispatch'

loginAction.js

export const getUsersList = function (store) {

    let url = '/Apis/allUsers';
    Vue.http.get(url).then((response) => {

            store.dispatch('GET_USER_RES', response.data);
        if (response.status == 200) {

        }
    }).catch((response) => {
        console.log('Error', response)
    })
}

loginStore.js

const state = {
    userResponse: []
}
const mutations = {
    GET_USER_RES (state, userResponse) {
        state.userResponse = userResponse;
    }
}
export default {
    state, mutations
}

login.vue

import {getUsersList} from './loginAction';
export default {

    created () {
        try{
            getUsersList();
        }catch(e){
            console.log(e);
        }
    },
    vuex: {
            getters: {
                getUsersList: state => state.userResponse
            },
            actions: {
                getUsersList
            }
    }
    }
    </ script>

1 回答

  • 0

    如果您手动调用操作(例如在try / catch中),则不会将商店上下文作为第一个参数 . 您可以使用 getUsersList(this.store) 我想,但我会使用dispatch来完成您的所有操作 . (我编辑了一点,以获得一个最小的运行示例,但我认为你明白了!)

    new Vue({
      render: h => h(App),
      created() {    
          this.$store.dispatch('getUsersList'); 
      },
      store: new Vuex.Store({
        getters: {
          getUsersList: state => state.userResponse
        },
        actions: {
          getUsersList
        }
      })
    }).$mount("#app");
    

    此外,使用 commit 来达到突变而不是 dispatch . 即:

    export const getUsersList = function ({commit}) {
        let url = '/Apis/allUsers';
        Vue.http.get(url).then((response) => {
            commit('GET_USER_RES', response.data); // because GET_USER_RES is a mutation
            ...
    

相关问题