vuex中axios请求封装
import { createStore } from 'vuex'
import axios from 'axios'
interface ColumnProps {
_id: string;
title: string;
avatar?: string;
description: string;
}
interface GlobalDataProps {
columns: ColumnProps[];
}
const getAndCommit = async (url: string, mutationName: string, commit: Commit) => {
const { data } = await axios.get(url)
commit(mutationName, data)
return data
}
const postAndCommit = async (url: string, mutationName: string, commit: Commit, payload: any) => {
const { data } = await axios.post(url, payload)
commit(mutationName, data)
return data
}
export const store = createStore<GlobalDataProps>({
state: {
columns: []
},
getters: {},
mutations: {
fetchColumns(state, rawData) {
state.columns = rawData.data.list
},
},
actions: {
fetchColumns({ commit }) {
axios.get('columns').then(res => {
commit('fetchColumns', res.data)
})
}
async fetchColumns1({ commit }) {
const { data } = await axios.get('columns')
return commit('fetchColumns', data)
}
fetchColumns2({ commit }) {
return getAndCommit('columns', 'fetchColumns', commit)
}
}
})