Co-authored-by: Pooya Parsa <pyapar@gmail.com>
3.1 KiB
useFetch
This composable provides a convenient wrapper around useAsyncData
and $fetch
. It automatically generates a key based on URL and fetch options, as well as infers API response type.
Type
function useFetch(
url: string | Request | Ref<string | Request> | () => string | Request,
options?: UseFetchOptions<DataT>
): Promise<AsyncData<DataT>>
type UseFetchOptions = {
key?: string,
method?: string,
params?: SearchParams,
body?: RequestInit['body'] | Record<string, any>
headers?: {key: string, value: string}[],
baseURL?: string,
server?: boolean
lazy?: boolean
default?: () => DataT
transform?: (input: DataT) => DataT
pick?: string[]
watch?: WatchSource[]
}
type AsyncData<DataT> = {
data: Ref<DataT>
pending: Ref<boolean>
refresh: () => Promise<void>
error: Ref<Error | boolean>
}
Params
- Url: The URL to fetch
- Options (extends unjs/ohmyfetch options & AsyncDataOptions):
method
: Request methodparams
: Query paramsbody
: Request body - automatically stringified (if an object is passed).headers
: Request headersbaseURL
: Base URL for the request
- Options (from
useAsyncData
):key
: a unique key to ensure that data fetching can be properly de-duplicated across requests, if not provided, it will be generated based on theurl
and fetch optionslazy
: Whether to resolve the async function after loading the route, instead of blocking navigation (defaults tofalse
).server
: Whether to fetch the data on the server (defaults totrue
).default
: A factory function to set the default value of the data, before the async function resolves - particularly useful with thelazy: true
option.pick
: Only pick specified keys in this array from thehandler
function result.watch
: watch reactive sources to auto-refreshtransform
: A function that can be used to alterhandler
function result after resolving.
::alert{type=warning}
If you provide a function or ref as the url
parameter, or if you provide functions as arguments to the options
parameter, then the useFetch
call will not match other useFetch
calls elsewhere in your codebase, even if the options seem to be identical. If you wish to force a match, you may provide your own key in options
.
::
Return values
- data: the result of the asynchronous function that is passed in
- pending: a boolean indicating whether the data is still being fetched
- refresh: a function that can be used to refresh the data returned by the
handler
function - error: an error object if the data fetching failed
By default, Nuxt waits until a refresh
is finished before it can be executed again. Passing true
as parameter skips that wait.
Example
const { data, pending, error, refresh } = await useFetch(
'https://api.nuxtjs.dev/mountains',
{
pick: ['title']
}
)
:ReadMore{link="/guide/features/data-fetching"}
:LinkExample{link="/examples/composables/use-fetch"}