axios的hook的封装与TS中泛型的使用?

hook一般封装成函数,函数需要有返回值,在组件中进行hook的引入可以通过调用函数并设置其返回值,通常利用的是解构方式进行返回值的获取。

如果hook中有参数,那么可以进行函数参数的抽离与动态化。

函数如何和TS结合,可以有很多位置进行类型设定,比如说函数的参数数据类型、函数的返回值数据类型,函数的指定数据中的数据类型(泛型)。

// useAxios.ts
import { ref } from 'vue';
import axios, { AxiosResponse } from 'axios';

export function useAxios<T>() {
  const data = ref<T | null>(null);
  const error = ref<string | null>(null);
  const loading = ref<boolean>(false);

  const fetchData = async (url: string) => {
    loading.value = true;
    try {
      const response: AxiosResponse<T> = await axios.get(url);
      data.value = response.data;
      error.value = null;
    } catch (err) {
      error.value = err.message || 'An error occurred';
    } finally {
      loading.value = false;
    }
  };

  return { data, error, loading, fetchData };
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于Vue 3和TypeScript的结合使用,以及axios封装使用,我可以给您一些指导。 首先,您需要在项目安装Vue 3和axios的依赖包。可以使用以下命令来安装它们: ``` npm install vue@next axios ``` 接下来,我们可以创建一个axios封装文件,比如`api.ts`。在这个文件,我们可以定义一些通用的请求方法,并对其封装。以下是一个示例: ```typescript import axios, { AxiosRequestConfig, AxiosResponse } from 'axios'; const instance = axios.create({ baseURL: 'https://api.example.com', // 设置API的基础URL timeout: 5000 // 设置请求超时时间 }); // 添加请求拦截器 instance.interceptors.request.use((config: AxiosRequestConfig) => { // 在请求发送之前做一些处理,比如添加token等 return config; }, (error: any) => { return Promise.reject(error); }); // 添加响应拦截器 instance.interceptors.response.use((response: AxiosResponse) => { // 对响应数据行处理,比如统一处理错误码等 return response.data; }, (error: any) => { return Promise.reject(error); }); // 定义通用的请求方法 export const get = (url: string, params?: any) => { return instance.get(url, { params }); }; export const post = (url: string, data?: any) => { return instance.post(url, data); }; // 其他请求方法类似... ``` 在Vue组件使用封装axios方法时,可以直接引入并调用。例如: ```typescript import { defineComponent, ref } from 'vue'; import { get } from './api'; export default defineComponent({ setup() { const data = ref(''); const fetchData = async () => { try { const response = await get('/data'); data.value = response; } catch (error) { console.error(error); } }; return { data, fetchData }; } }); ``` 上述示例,我们使用了Vue 3的Composition API来定义组件。在`fetchData`函数,我们调用了`get`方法来发起GET请求,并将返回的数据赋值给`data`变量。 这只是一个简单的示例,您可以根据实际需要行更多的封装和处理。希望对您有所帮助!如有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值