2 回答
TA贡献1842条经验 获得超21个赞
state: {
userList: [],
},
mutations: {
// 简化mutatios的代码量
updateData(state, data) {
state[data.key] = data.value;
}
},
actions:{
getUserList: async function(contex) {
let value = await axios('you api url').then(res => res.data);
contex.commit("updateData", {
key: "userList",
value
});
}
}
上面是一个直接更新到store的一个例子,如果要返回可以像下面这样,在组件里面可以同步使用返回的数据:
// actions.js
getUserList: async function(contex) {
let value = await axios('you api url').then(res => res.data);
return value;
}
// ***.vue
methods:{
...mapActions(["getUserList"]),
getData(){
const userList = this.getUserList();
// 后续的处理
}
}
如果要想把回调写在组件里面就应该是这样:
// actions.js
getUserList(contex) {
return axios('you api url').then(res => res.data);
}
// ***.vue
methods:{
...mapActions(["getUserList"]),
getDataAsync(){
this.getUserList().then(res=>{
// 后续的处理
});
},
getDataSync:async function(){
const data = await this.getUserList().then(res=>res.data);
// 后续的处理
}
}
对于题主的问题,建议在更新store.state,如果只是一个ajax请求,其返回的数据不在组件间共享,那么可以直接写在组件内部,不用走vuex。
添加回答
举报