Javascript 在vuex操作中使用fetch方法

Javascript 在vuex操作中使用fetch方法,javascript,vue.js,Javascript,Vue.js,我创建了一个用于获取api的存储操作。当我试图从创建的生命周期钩子中的组件分派它时。我无法读取未定义的属性“dispatch”错误。我知道有几个类似的问题,但都没有解决这个问题 我试着用正常的方法发送它,但仍然得到这个错误 store.js import Vue from "vue"; import Vuex from "Vuex"; Vue.use(Vuex); export default new Vuex.Store({ state: { categories: []

我创建了一个用于获取api的存储操作。当我试图从创建的生命周期钩子中的组件分派它时。我无法
读取未定义的属性“dispatch”错误。我知道有几个类似的问题,但都没有解决这个问题

我试着用正常的方法发送它,但仍然得到这个错误

store.js

import Vue from "vue";
import Vuex from "Vuex";

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    categories: []
  },
  mutations: {
    SET_CATEGORIES(state, categories) {
      state.categories = categories;
    }
  },
  actions: {
    getCategories({ commit }) {
      return fetch("https://api.chucknorris.io/jokes/categories")
        .then(response => {
          return response.json();
        })
        .then(jsonObj => {
          commit("SET_CATEGORIES", jsonObj);
        })
        .catch(error => {
          console.log(error);
        });
    }
  }
});
这是我试图发送的组件-

<script>
export default {
  data() {
    return {
      joke: "",
      categories: [],
      selectedCat: ""
    };
  },
  computed: {
    disabled() {
      if (this.joke) {
        return false;
      } else {
        return true;
      }
    }
  },
  methods: {
    addToFavs: function() {
      this.$emit("pushJoke", this.joke);
      this.fetchJoke();
    }

  },

  created() {
    this.$store.dispatch('getCategories');
  }  
};
</script>

导出默认值{
数据(){
返回{
笑话:“,
类别:[],
选择的猫:“
};
},
计算:{
残疾人士(){
如果(这个笑话){
返回false;
}否则{
返回true;
}
}
},
方法:{
addToFavs:function(){
this.$emit(“pushJoke”,this.joke);
这是一个笑话;
}
},
创建(){
此.store.dispatch('getCategories');
}  
};
我做错了什么

从添加

import { mapActions } from 'vuex'
在你的剧本里

然后添加到
方法

methods: {
  ...mapActions([
     'getCategories'
  ])
.
.
}
并将您创建的方法更改为

created() {
  this.getCategories()
}  

此外,您可能希望创建一个vuex操作来替换该
this.$emit(“pushJoke”,this.joke)行,并以与已映射的
getCategories

类似的方式映射该行,这是因为您没有将vuex存储选项添加到Vue的根实例。要解决此问题,请导入存储并将其附加到vue实例

import { store } from '.store'

const app = new Vue({
  store
})

错误
无法读取未定义的属性“dispatch”
告诉您,问题不在于fetch,而在于存储。Vue组件无法在应用商店中找到此操作,如果没有获取,它将是同一事件。谢谢,有什么原因基于我的代码吗?@kinggray,这不对。并不是说它找不到行动,它根本找不到商店。-OP,请在初始化Vue对象的任何位置发布(
新Vue({…})
)-这很可能是问题的根源。我猜您没有将
存储区添加到Vue实例中。类似这样的内容:
const-app=new-Vue({el:'#app',store,…})
@kinggray你是对的,我现在添加了它,错误消失了,但fetch不起作用,所以现在问题可能出在操作本身。谢谢,但它没有帮助。仍然得到相同的错误。