Javascript 在vuex操作中使用fetch方法
我创建了一个用于获取api的存储操作。当我试图从创建的生命周期钩子中的组件分派它时。我无法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: []
读取未定义的属性“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不起作用,所以现在问题可能出在操作本身。谢谢,但它没有帮助。仍然得到相同的错误。