
const {data,dataUpdatedAt,error,errorUpdatedAt,failureCount,isError,isFetched,isFetchedAfterMount,isFetching,isIdle,isLoading,isLoadingError,isPlaceholderData,isPreviousData,isRefetchError,isRefetching,isStale,isSuccess,refetch,remove,status,} = useQuery(queryKey, queryFn?, {cacheTime,enabled,initialData,initialDataUpdatedAtisDataEqual,keepPreviousData,meta,notifyOnChangeProps,notifyOnChangePropsExclusions,onError,onSettled,onSuccess,queryKeyHashFn,refetchInterval,refetchIntervalInBackground,refetchOnMount,refetchOnReconnect,refetchOnWindowFocus,retry,retryOnMount,retryDelay,select,staleTime,structuralSharing,suspense,useErrorBoundary,})// or using the object syntaxconst result = useQuery({queryKey,queryFn,enabled,})
Options
queryKey: string | unknown[]enabled is not set to false).queryFn: (context: QueryFunctionContext) => Promise<TData>QueryFunctionContext object with the following variables:queryKey: EnsuredQueryKey: the queryKey, guaranteed to be an Arrayenabled: booleanfalse to disable this query from automatically running.retry: boolean | number | (failureCount: number, error: TError) => booleanfalse, failed queries will not retry by default.true, failed queries will retry infinitely.number, e.g. 3, failed queries will retry until the failed query count meets that number.retryOnMount: booleanfalse, the query will not be retried on mount if it contains an error. Defaults to true.retryDelay: number | (retryAttempt: number, error: TError) => numberretryAttempt integer and the actual Error and returns the delay to apply before the next attempt in milliseconds.attempt => Math.min(attempt > 1 ? 2 ** attempt * 1000 : 1000, 30 * 1000) applies exponential backoff.attempt => attempt * 1000 applies linear backoff.staleTime: number | Infinity0Infinity, the data will never be considered stalecacheTime: number | InfinityInfinity, will disable garbage collectionqueryKeyHashFn: (queryKey: QueryKey) => stringqueryKey to a string.refetchInterval: number | false | ((data: TData | undefined, query: Query) => number | false)refetchIntervalInBackground: booleantrue, queries that are set to continuously refetch with a refetchInterval will continue to refetch while their tab/window is in the backgroundrefetchOnMount: boolean | "always"truetrue, the query will refetch on mount if the data is stale.false, the query will not refetch on mount."always", the query will always refetch on mount.refetchOnWindowFocus: boolean | "always"truetrue, the query will refetch on window focus if the data is stale.false, the query will not refetch on window focus."always", the query will always refetch on window focus.refetchOnReconnect: boolean | "always"truetrue, the query will refetch on reconnect if the data is stale.false, the query will not refetch on reconnect."always", the query will always refetch on reconnect.notifyOnChangeProps: string[] | "tracked"['data', 'error'] for example, the component will only re-render when the data or error properties change."tracked", access to properties will be tracked, and the component will only re-render when one of the tracked properties change.notifyOnChangePropsExclusions: string[]['isStale'] for example, the component will not re-render when the isStale property changes.onSuccess: (data: TData) => voidsetQueryData.onError: (error: TError) => voidonSettled: (data?: TData, error?: TError) => voidselect: (data: TData) => unknownsuspense: booleantrue to enable suspense mode.true, useQuery will suspend when status === 'loading'true, useQuery will throw runtime errors when status === 'error'initialData: TData | () => TDatastaleTime has been set.initialData is persisted to the cacheinitialDataUpdatedAt: number | (() => number | undefined)initialData itself was last updated.placeholderData: TData | () => TDataloading data and no initialData has been provided.placeholderData is not persisted to the cachekeepPreviousData: booleanfalsedata will be kept when fetching new data because the query key changed.structuralSharing: booleantruefalse, structural sharing between query results will be disabled.useErrorBoundary: undefined | boolean | (error: TError) => booleanuseErrorBoundary value, which is undefinedtrue if you want errors to be thrown in the render phase and propagate to the nearest error boundaryfalse to disable suspense's default behavior of throwing errors to the error boundary.true) or return the error as state (false)meta: Record<string, unknown>query is available, and is also part of the QueryFunctionContext provided to the queryFn.Returns
status: Stringidle if the query is idle. This only happens if a query is initialized with enabled: false and no initial data is available.loading if the query is in a "hard" loading state. This means there is no cached data and the query is currently fetching, eg isFetching === trueerror if the query attempt resulted in an error. The corresponding error property has the error received from the attempted fetchsuccess if the query has received a response with no errors and is ready to display its data. The corresponding data property on the query is the data received from the successful fetch or if the query's enabled property is set to false and has not been fetched yet data is the first initialData supplied to the query on initialization.isIdle: booleanstatus variable above, provided for convenience.isLoading: booleanstatus variable above, provided for convenience.isSuccess: booleanstatus variable above, provided for convenience.isError: booleanstatus variable above, provided for convenience.isLoadingError: booleantrue if the query failed while fetching for the first time.isRefetchError: booleantrue if the query failed while refetching.data: TDataundefined.dataUpdatedAt: numberstatus as "success".error: null | TErrornullerrorUpdatedAt: numberstatus as "error".isStale: booleantrue if the data in the cache is invalidated or if the data is older than the given staleTime.isPlaceholderData: booleantrue if the data shown is the placeholder data.isPreviousData: booleantrue when keepPreviousData is set and data from the previous query is returned.isFetched: booleantrue if the query has been fetched.isFetchedAfterMount: booleantrue if the query has been fetched after the component mounted.isFetching: booleantrue whenever a request is in-flight, which includes initial loading as well as background refetches.true if the query is currently fetching, including background fetching.isRefetching: booleantrue whenever a background refetch is in-flight, which does not include initial loadingisFetching && !isLoadingfailureCount: number0 when the query succeeds.refetch: (options: { throwOnError: boolean, cancelRefetch: boolean }) => Promise<UseQueryResult>throwOnError: true optioncancelRefetch is true, then the current request will be cancelled before a new request is maderemove: () => voidThe latest TanStack news, articles, and resources, sent to your inbox.