改变axios的用法后,我的工作效率提升了3倍

实际场景下的请求问题

作为前端开发,网络请求肯定是我们经常要面对的事情,在前端请求中,axios和fetch API应该是我们最常用的请求工具了,它们在发送请求和接收响应数据已经做到了足够简单。

但在实际项目中,为了达到更好的用户体验,我们还需要考虑下面这几个因素:

  1. 展示加载中的请求状态
  2. 展示请求错误状态
  3. 展示上传/下载文件的进度信息

上面这些都需要我们编写额外的代码,增加了不少的工作量,你的请求代码可能是下面这样的,我们以vue3代码为示例。

js 复制代码
const loading = ref(false);  
const data = ref({});  
const error = ref(null);  
const request = async () => { 
  try {  
    loading.value = true;  
    data.value = await axios.get('/xxx');  
  } catch (e) {  
    error.value = e;  
  }
  loading.value = false;  
};
onMounted(request);

如果面对大量的api,这工作量可想而知,想到这时就有点头疼啊。有没有一种方法可以自动帮我处理这些逻辑,让请求代码看起来更简洁呢?

解决

我们可以用封装的思路,把上面这些都封装为一个简单的use hook,就可以很好地解决了,封装后的代码大概是下面这样的。

js 复制代码
export const useRequest = (url) => {
  const loading = ref(false);
  const data = ref({});
  const error = ref(null);
  const request = async () => {
    try {
      loading.value = true;
      data.value = await axios.get(url);
    } catch (e) {
      error.value = e;
    }
    loading.value = false;
  }
  onMounted(request);

  return {
    loading,
    data,
    error
  };
}

这是一个最简单的use hook实现,它帮我们解决了请求模板代码的问题。当然你还可以使用use hook封装更多更高级的请求功能,而这些功能现在不必你自己封装了,使用alova就可以了。

alova 是一个轻量级的请求策略库,针对分页请求、表单提交、上传和下载文件等不同请求场景使用对应的请求模块,让开发者使用非常少量的代码就可以实现高可用性和高流畅性的请求功能,这意味着,你再也不需要自己绞尽脑汁编写请求优化代码,再也不需要自己维护请求数据和相关状态,你只需要选择并使用请求模块,设置参数后,alova 帮你搞定!

在引入alova后,我的工作效率直接提高了3倍,强烈推荐给大家。

你可以将alova理解成是axios或fetch-api等请求工具的一种武器装备,将alova与请求工具配合使用将会让它们变得更加强大。

其实,alova底层依然依赖axios或fetch-api等请求函数进行请求,因此你仍然可以使用你喜欢的请求库。

以下是一个基于vue3+axios+alova的使用示例,alova将自动为你创建请求相关的,可以直接用于视图的响应式状态,代码如下:

可运行的示例点此去查看

html 复制代码
<template>
  <div v-if="loading">Loading...</div>
  <div v-else-if="error">{{ error.message }}</div>
  <span v-else>responseData: {{ data }}</span>
</template>

<script setup>
import { createAlova, useRequest } from 'alova';
import VueHook from 'alova/vue';
import { axiosRequestAdapter } from '@alova/adapter-axios';

const alovaInstance = createAlova({
  statesHook: VueHook,

  // 设置使用axios作为请求工具
  requestAdapter: axiosRequestAdapter()
});

const {
  // 加载状态
  loading,

  // 响应数据
  data,

  // 错误信息,请求错误时才有值
  error
} = useRequest(alovaInstance.Get('/todoList'));
</script>

是不是非常nice!!!之前需要我们自己实现的各种功能,alova 都帮我们做了。

总结

alova目前提供了8种请求策略,如果你希望在不同的请求场景下方便地实现特定的请求需求,那千万别错过它哦。alova 还提供了缓存管理、请求共享等更多功能,可以覆盖绝大多数请求场景。

所以,在你的下一个项目中,你也可以来试试 alova,一定能给你带来更愉快的开发体验!

结尾

同学,要是觉得对你有用请帮忙点个赞或收藏!

相关信息

我是alova御用推广人🤘🏻🤘🏼🤘,alova是一个轻量级的请求策略库,它针对不同请求场景分别提供了具有针对性的请求策略,来提升应用可用性、流畅性,降低服务端压力,让应用如智者一般具备卓越的策略思维。

alova官网

alova Github地址

往期热文

相关推荐
问道飞鱼几秒前
【前端知识】强大的js动画组件anime.js
开发语言·前端·javascript·anime.js
k09331 分钟前
vue中proxy代理配置(测试一)
前端·javascript·vue.js
傻小胖3 分钟前
React 脚手架使用指南
前端·react.js·前端框架
程序员海军15 分钟前
2024 Nuxt3 年度生态总结
前端·nuxt.js
m0_7482567826 分钟前
SpringBoot 依赖之Spring Web
前端·spring boot·spring
web135085886351 小时前
前端node.js
前端·node.js·vim
m0_512744641 小时前
极客大挑战2024-web-wp(详细)
android·前端
若川1 小时前
Taro 源码揭秘:10. Taro 到底是怎样转换成小程序文件的?
前端·javascript·react.js
潜意识起点1 小时前
精通 CSS 阴影效果:从基础到高级应用
前端·css
奋斗吧程序媛1 小时前
删除VSCode上 origin/分支名,但GitLab上实际上不存在的分支
前端·vscode