【问题标题】:Axios - get data from api in vuex actions?Axios - 在 vuex 操作中从 api 获取数据?
【发布时间】:2020-12-23 19:38:20
【问题描述】:

如何正确传输或重写action中的函数,以接收每个相册中的第一张照片?

我的照片模特:

import { api } from "@/apis/config";
const endPoint = 'photos'
const state = {
    photos: []
}
const getters = {}
const mutations = {
    SET_PHOTOS(state, data) {
        state.photos = data
    }
}
const actions = {
    loadMore(id) {
        api.get(`photos?albumId=${id}`).then(response => {
            return response.data[0].thumbnailUrl;
        });
    }
}

export default {
    namespaced: true,
    state,
    getters,
    actions,
    mutations
};

还有我的专辑组件:

...
<script>
import {mapActions} from "vuex";
export default {
  name: "GridAlbums",
  props: ['album'],
  data() {
    return {
      loading: true,
      errored: false,
      photo: null
    }
  },
  mounted() {
    this.photo = this.loadMore(this.album.id)
  },
  methods: {
    ...mapActions("photos", ["loadMore"])
  }
}
</script>
...

这是我的api配置文件,其中VUE_APP_HOST是https://jsonplaceholder.typicode.com/

import axios from 'axios'

export const api = axios.create({
    baseURL: process.env.VUE_APP_HOST,
})

api.interceptors.response.use(
    response => {
        return response
    },
    error => {
        return Promise.reject(error)
    }
)

如果您以这种方式获取数据,那么一切都会变成应有的样子:

【问题讨论】:

标签: vue.js axios vuex


【解决方案1】:

尝试在 vuex 动作中添加 async / await,因为动作必须是异步的,并且存储和突变是同步的。

也可以使用 try / catch 代替 Promise 这样你的代码会更干净

【讨论】:

    猜你喜欢
    • 2021-01-12
    • 2018-07-05
    • 1970-01-01
    • 2019-07-30
    • 2021-09-22
    • 2019-06-27
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多