--- category: '@Integrations' --- # useAxios Wrapper for [`axios`](https://github.com/axios/axios). ## Install ```bash npm i axios@^1 ``` ## Usage ```ts import { useAxios } from '@vueuse/integrations/useAxios' const { data, isFinished } = useAxios('/api/posts') ``` ### Return Values | Property | Type | Description | | ------------------ | ---------------------------- | ---------------------------------------- | | `data` | `Ref` | Response data | | `response` | `Ref` | Full axios response | | `error` | `Ref` | Error if request failed | | `isFinished` | `Ref` | Request has completed (success or error) | | `isLoading` | `Ref` | Request is in progress | | `isAborted` | `Ref` | Request was aborted | | `abort` / `cancel` | `() => void` | Abort the current request | | `execute` | `(url?, config?) => Promise` | Execute/re-execute the request | ### With Axios Instance ```ts import { useAxios } from '@vueuse/integrations/useAxios' import axios from 'axios' const instance = axios.create({ baseURL: '/api', }) const { data, isFinished } = useAxios('/posts', instance) ``` ### With Config Options ```ts import { useAxios } from '@vueuse/integrations/useAxios' import axios from 'axios' const instance = axios.create({ baseURL: '/api', }) const { data, isFinished } = useAxios('/posts', { method: 'POST' }, instance) ``` ### Manual Execution When you don't pass a `url`, the request won't fire immediately: ```ts import { useAxios } from '@vueuse/integrations/useAxios' const { execute } = useAxios() execute(url) ``` The `execute` function `url` is optional - `url2` will replace `url1`: ```ts import { useAxios } from '@vueuse/integrations/useAxios' const { execute } = useAxios(url1, {}, { immediate: false }) execute(url2) ``` The `execute` function can accept config only: ```ts import { useAxios } from '@vueuse/integrations/useAxios' const { execute } = useAxios(url1, { method: 'GET' }, { immediate: false }) execute({ params: { key: 1 } }) execute({ params: { key: 2 } }) ``` ### Awaiting Results The return value is thenable, so you can await it: ```ts import { useAxios } from '@vueuse/integrations/useAxios' const { data, isFinished, error } = await useAxios('/api/posts') // data is now populated ``` Or await the execute function: ```ts import { useAxios } from '@vueuse/integrations/useAxios' const { execute } = useAxios() const result = await execute(url) ``` ### Options ```ts const { data } = useAxios('/api/posts', config, instance, { // Execute immediately (default: true if url provided) immediate: true, // Use shallowRef for data (default: true) shallow: true, // Abort previous request on new execute (default: true) abortPrevious: true, // Reset data before executing (default: false) resetOnExecute: false, // Initial data value initialData: [], // Callbacks onSuccess: data => console.log('Success:', data), onError: error => console.error('Error:', error), onFinish: () => console.log('Finished'), }) ``` ## Type Declarations ```ts export interface UseAxiosReturn< T, R = AxiosResponse, _D = any, O extends UseAxiosOptions = UseAxiosOptions, > { /** * Axios Response */ response: ShallowRef /** * Axios response data */ data: O extends UseAxiosOptionsWithInitialData ? Ref : Ref /** * Indicates if the request has finished */ isFinished: Ref /** * Indicates if the request is currently loading */ isLoading: Ref /** * Indicates if the request was canceled */ isAborted: Ref /** * Any errors that may have occurred */ error: ShallowRef /** * Aborts the current request */ abort: (message?: string | undefined) => void /** * Alias to `abort` */ cancel: (message?: string | undefined) => void /** * Alias to `isAborted` */ isCanceled: Ref } export interface StrictUseAxiosReturn< T, R, D, O extends UseAxiosOptions = UseAxiosOptions, > extends UseAxiosReturn { /** * Manually call the axios request */ execute: ( url?: string | AxiosRequestConfig, config?: AxiosRequestConfig, ) => Promise> } export interface EasyUseAxiosReturn extends UseAxiosReturn { /** * Manually call the axios request */ execute: ( url: string, config?: AxiosRequestConfig, ) => Promise> } export interface UseAxiosOptionsBase { /** * Will automatically run axios request when `useAxios` is used * */ immediate?: boolean /** * Use shallowRef. * * @default true */ shallow?: boolean /** * Abort previous request when a new request is made. * * @default true */ abortPrevious?: boolean /** * Callback when error is caught. */ onError?: (e: unknown) => void /** * Callback when success is caught. */ onSuccess?: (data: T) => void /** * Sets the state to initialState before executing the promise. */ resetOnExecute?: boolean /** * Callback when request is finished. */ onFinish?: () => void } export interface UseAxiosOptionsWithInitialData< T, > extends UseAxiosOptionsBase { /** * Initial data */ initialData: T } export type UseAxiosOptions = | UseAxiosOptionsBase | UseAxiosOptionsWithInitialData export declare function useAxios< T = any, R = AxiosResponse, D = any, O extends UseAxiosOptionsWithInitialData = UseAxiosOptionsWithInitialData, >( url: string, config?: AxiosRequestConfig, options?: O, ): StrictUseAxiosReturn & Promise> export declare function useAxios< T = any, R = AxiosResponse, D = any, O extends UseAxiosOptionsWithInitialData = UseAxiosOptionsWithInitialData, >( url: string, instance?: AxiosInstance, options?: O, ): StrictUseAxiosReturn & Promise> export declare function useAxios< T = any, R = AxiosResponse, D = any, O extends UseAxiosOptionsWithInitialData = UseAxiosOptionsWithInitialData, >( url: string, config: AxiosRequestConfig, instance: AxiosInstance, options?: O, ): StrictUseAxiosReturn & Promise> export declare function useAxios< T = any, R = AxiosResponse, D = any, O extends UseAxiosOptionsBase = UseAxiosOptionsBase, >( url: string, config?: AxiosRequestConfig, options?: O, ): StrictUseAxiosReturn & Promise> export declare function useAxios< T = any, R = AxiosResponse, D = any, O extends UseAxiosOptionsBase = UseAxiosOptionsBase, >( url: string, instance?: AxiosInstance, options?: O, ): StrictUseAxiosReturn & Promise> export declare function useAxios< T = any, R = AxiosResponse, D = any, O extends UseAxiosOptionsBase = UseAxiosOptionsBase, >( url: string, config: AxiosRequestConfig, instance: AxiosInstance, options?: O, ): StrictUseAxiosReturn & Promise> export declare function useAxios, D = any>( config?: AxiosRequestConfig, ): EasyUseAxiosReturn & Promise> export declare function useAxios, D = any>( instance?: AxiosInstance, ): EasyUseAxiosReturn & Promise> export declare function useAxios, D = any>( config?: AxiosRequestConfig, instance?: AxiosInstance, ): EasyUseAxiosReturn & Promise> ```