Back to Vueuse

useAxios

packages/integrations/useAxios/index.md

14.3.03.3 KB
Original Source

useAxios

Wrapper for axios.

Install

bash
npm i axios@^1

Usage

ts
import { useAxios } from '@vueuse/integrations/useAxios'

const { data, isFinished } = useAxios('/api/posts')

Return Values

PropertyTypeDescription
dataRef<T>Response data
responseRef<AxiosResponse>Full axios response
errorRef<unknown>Error if request failed
isFinishedRef<boolean>Request has completed (success or error)
isLoadingRef<boolean>Request is in progress
isAbortedRef<boolean>Request was aborted
abort / cancel() => voidAbort the current request
execute(url?, config?) => PromiseExecute/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'),
})