哪个生命周期钩子是调度 API 获取请求的最佳实践?

Posted

技术标签:

【中文标题】哪个生命周期钩子是调度 API 获取请求的最佳实践?【英文标题】:Which life cycle hook is best practise to dispatch an API fetch request with? 【发布时间】:2020-06-12 17:01:57 【问题描述】:

我只是想知道 Vue.js 社区目前是否就使用哪个生命周期挂钩来调度 API 获取操作达成共识?

例如,我有一个动作比如在我的Vuex store:

  ...
  actions: 
    fetchAccount: async ( commit , payload) => 
      await Vue.prototype.$API.fetchAccount(payload).then((response) => 
        commit("SET_ACTIVE_ACCOUNT", response.data);
      );
    ,
  
  ...

动作被传递给服务:

import  axios  from "@/services/http";
import  EventEmitter  from "events";

class accountServiceAPI extends EventEmitter 
  constructor() 
    super();
    this.accessToken = "";
  

  fetchAccount(payload) 
    return new Promise(resolve, reject => 
      axiosWave.get(`api//v2/accounts/retrieve/$payload.accountUUID`,  headers:  ).then(response => 
        if (response.success) 
          resolve(response.data);
         else 
          reject(response.data);
        
      ).catch(error => 
        reject(error.response);
      );
    );
  


const accountServiceAPI = new accountServiceAPI();

accountServiceAPI.setMaxListeners(5);

export default accountServiceAPI;

我通常在 created() 生命周期钩子中为需要数据的组件发送这个...但肯定有更高效的方式吗?

【问题讨论】:

这正是我要做的。但我不会混用aync/awaitthen 但是,如果您的整个应用程序依赖于此,您可以在初始化之前将整个应用程序包装在其中。 @oshell 使用mount()created() 甚至beforeCreate() 有什么不同吗? ***.com/questions/45813347/… vuejs.org/images/lifecycle.png 【参考方案1】:

您可以早在created() 中从 API 获取并操作您的数据/状态。 mounted() 在实例已经安装或渲染时调用。您通常会在这里进行与 UI 相关的设置。

此外,您可以像这样改进fetchAccount 操作:

fetchAccount: async ( commit , payload) => 
  const  data  = await Vue.prototype.$API.fetchAccount(payload);
  commit("SET_ACTIVE_ACCOUNT", data);

【讨论】:

感谢 Alphonsus,感谢您对此的回答。

以上是关于哪个生命周期钩子是调度 API 获取请求的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

Vue3 生命周期钩子函数

mpvue使用入门

vue生命周期钩子函数如何第二次打开不请求接口

在 Vue.js2 中使用哪个生命周期钩子在页面加载时调用函数?

Vue生命周期,计算属性方法侦听器

VUE3组合api的钩子函数生命周期