| 1234567891011121314151617181920212223242526 |
- import { ref, UnwrapRef } from 'vue';
- import { AxiosResponse } from 'axios';
- import { HttpResponse } from '@/api/interceptor';
- import useLoading from './loading';
- // use to fetch list
- // Don't use async function. It doesn't work in async function.
- // Use the bind function to add parameters
- // example: useRequest(api.bind(null, {}))
- export default function useRequest<T>(
- api: () => Promise<AxiosResponse<HttpResponse>>,
- defaultValue = [] as unknown as T,
- isLoading = true
- ) {
- const { loading, setLoading } = useLoading(isLoading);
- const response = ref<T>(defaultValue);
- api()
- .then((res) => {
- response.value = res.data as unknown as UnwrapRef<T>;
- })
- .finally(() => {
- setLoading(false);
- });
- return { loading, response };
- }
|