返回

TypeScript封装react-hook公共请求函数useAxios

前端

引言

使用React函数组件搭配React Hook外加TypeScript这样的组合方式去完成功能需求已经有一年多的时间了,对Hook从陌生到熟悉的过程中,个人也感觉受益良多。不得不说,React Hook采用声明式的语法定义相关变量,独立于函数存放的方式去引入状态并进行控制的代码逻辑,让代码的可读性与可维护性都大大提高,对于代码工程的长期维护具有重大的意义。

一、useAxios函数的封装

  1. 函数签名
const useAxios = (config?: AxiosRequestConfig): {
    run: (data?: any) => Promise<AxiosResponse<any>>;
    errors: AxiosError<any> | null;
    loading: boolean;
};
  1. 参数说明
  • config:可选参数,用于配置Axios请求。可以传入AxiosRequestConfig类型的对象,包括urlmethoddata等属性。
  1. 返回值说明
  • run:用于发送Axios请求的函数。它接受一个可选参数data,用于发送请求体。它返回一个Promise,解析后得到AxiosResponse类型的对象。
  • errors:存储Axios请求错误信息的变量。它是一个AxiosError类型的对象,或者为null
  • loading:表示请求是否正在加载的布尔变量。

二、useAxios函数的使用

  1. 基本用法
const { run, errors, loading } = useAxios({
    url: 'https://example.com/api/v1/users',
    method: 'GET',
});

run().then((res) => {
    console.log(res.data);
}).catch((err) => {
    console.log(err.message);
});
  1. 使用自定义配置
const { run, errors, loading } = useAxios({
    url: 'https://example.com/api/v1/users',
    method: 'POST',
    data: {
        name: 'John Doe',
        email: 'johndoe@example.com',
    },
});

run().then((res) => {
    console.log(res.data);
}).catch((err) => {
    console.log(err.message);
});

三、useAxios函数的优点

  1. 代码简洁 :useAxios函数封装了Axios请求的逻辑,使代码更加简洁易读。
  2. 代码复用 :useAxios函数可以复用在不同的组件中,减少代码重复。
  3. 错误处理 :useAxios函数自动处理了Axios请求的错误,并提供了errors变量来存储错误信息。
  4. 加载状态 :useAxios函数提供了loading变量来指示请求是否正在加载。

四、总结

useAxios函数是一个非常实用的TypeScript Hook,它可以帮助我们轻松地发送Axios请求。它具有代码简洁、代码复用、错误处理和加载状态等优点。如果你的React项目中需要发送HTTP请求,那么强烈建议你使用useAxios函数。