【问题标题】:What is the best way to set up multiple urls (axios) in Vuex Store?在 Vuex Store 中设置多个 url (axios) 的最佳方法是什么?
【发布时间】:2020-08-01 11:33:27
【问题描述】:

我有几个要检索的页面,我可以正常工作,但请注意页面加载速度有点慢,而数据不多。

如何使用 axios 在 vuex store 中设置我的 API,使其性能更好。

商店:

export default {
    state: { 
    homepage: [],
    aboutUs: []
},


actions: {
  async loadPosts({ commit }) {
    // Define urls pages
    const urlHomepage = 'https://api.domain.com/homepage';
    const urlaboutUs = 'https://api.domain.com/aboutUs';

    // Responses pages
    const responseHomepage = await this.$axios.get(urlHomepage);
    const responseaboutUs = await this.$axios.get(urlaboutUs);

    // variables pages
    this.homepage = responseHomepage.data
    this.aboutUs = responseaboutUs.data

    // mutations pages
    commit('SET_HOMEPAGE', this.homepage)
    commit('SET_aboutUs', this.aboutUs)
  }
},

mutations: {
  SET_HOMEPAGE (state, homepage) {
    state.homepage = homepage;
  },
  SET_aboutUs (state, aboutUs) {
    state.aboutUs = aboutUs;
  }
}
};

我在我的页面中使用它:

import {mapState} from 'vuex';

export default {
  name: 'Home',
  mounted() {
    this.$store.dispatch('loadPosts')
  },
  computed: {
    ...mapState([
      'homepage'
    ])
  }
}

通过添加:

{{homepage}}

有没有更好的方法来存储多个 API url?我正在使用 Nuxt.js。

【问题讨论】:

    标签: vue.js axios vuex nuxt.js


    【解决方案1】:

    您可以通过同时运行异步调用而不是仅在另一个完成后才运行一个调用来显着加快速度(尤其是超过 2 页):

    版本 1

    // Execute async immediately and store the promises
    const pH = this.$axios.get(urlHomepage); 
    const pA = this.$axios.get(urlaboutUs);
    
    // Await them all at once instead of individually
    const [rH, rA] = await Promise.all([pH, pA]);
    

    或者另一种写法:

    第 2 版

    const [rH, rA] = await Promise.all([
      this.$axios.get(urlHomepage),
      this.$axios.get(urlaboutUs)
    ]);
    

    结果数组顺序与调用顺序一致

    然后存储结果:

    // variables pages
    this.homepage = rH.data
    this.aboutUs = rA.data
    
    // mutations pages
    commit('SET_HOMEPAGE', this.homepage)
    commit('SET_aboutUs', this.aboutUs)
    

    【讨论】:

    • 这可行,但加载速度仍然很慢。大约 2 秒后数据跳转,我在开发人员工具的网络选项卡中看到数据每次加载 3 次。有没有办法在一个文件中从 vuex 导入地图状态并在一个文件中定义地图状态?目前我正在每个需要使用数据的组件中导入 mapstate。
    • 这只是确保同时发出所有异步请求,因为您在开始下一个请求之前等待每个前一个请求完成。但如果你打电话给loadPosts 3 次,那就完全是另一个问题了。您是否在每个组件中发送loadPostsmapState 本身是无害的,因此无需担心合并。
    • 是的,我现在在组件中删除了 loadPosts :) 现在它正在加载 1 次,我现在只在页面中调度 loadPosts
    猜你喜欢
    • 1970-01-01
    • 2014-07-30
    • 2013-04-06
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2021-10-26
    • 1970-01-01
    相关资源
    最近更新 更多