dehydrate creates a frozen representation of a cache that can later be hydrated with Hydrate, useHydrate, or hydrate. This is useful for passing prefetched queries from server to client or persisting queries to localStorage or other persistent locations. It only includes currently successful queries by default.
import { dehydrate } from '@tanstack/react-query'
const dehydratedState = dehydrate(queryClient, {
shouldDehydrateQuery,
})Options
client: QueryClient
options: DehydrateOptions
Optional
dehydrateMutations: boolean
dehydrateQueries: boolean
shouldDehydrateMutation: (mutation: Mutation) => boolean
shouldDehydrateQuery: (query: Query) => boolean
Optional
This function is called for each query in the cache
Return true to include this query in dehydration, or false otherwise
The default version only includes successful queries, do shouldDehydrateQuery: () => true to include all queries
If you would like to extend the function while retaining the previous behavior, import and execute defaultShouldDehydrateQuery as part of the return statement
Returns
dehydratedState: DehydratedState
Some storage systems (such as browser Web Storage API) require values to be JSON serializable. If you need to dehydrate values that are not automatically serializable to JSON (like Error or undefined), you have to serialize them for yourself. Since only successful queries are included per default, to also include Errors, you have to provide shouldDehydrateQuery, e.g.:
// server
const state = dehydrate(client, { shouldDehydrateQuery: () => true }) // to also include Errors
const serializedState = mySerialize(state) // transform Error instances to objects
// client
const state = myDeserialize(serializedState) // transform objects back to Error instances
hydrate(client, state)hydrate adds a previously dehydrated state into a cache.
import { hydrate } from '@tanstack/react-query'
hydrate(queryClient, dehydratedState, options)Options
client: QueryClient
dehydratedState: DehydratedState
options: HydrateOptions
If the queries included in dehydration already exist in the queryCache, hydrate does not overwrite them and they will be silently discarded.
[//]: # 'useHydrate'
useHydrate adds a previously dehydrated state into the queryClient that would be returned by useQueryClient(). If the client already contains data, the new queries will be intelligently merged based on update timestamp.
import { useHydrate } from '@tanstack/react-query'
useHydrate(dehydratedState, options)Options
dehydratedState: DehydratedState
options: HydrateOptions
Optional
defaultOptions: QueryOptions
context?: React.Context<QueryClient | undefined>
Use this to use a custom React Query context. Otherwise, defaultContext will be used.
[//]: # 'useHydrate' [//]: # 'Hydrate'
Hydrate wraps useHydrate into component. Can be useful when you need hydrate in class component or need hydrate on same level where QueryClientProvider rendered.
import { Hydrate } from '@tanstack/react-query'
function App() {
return <Hydrate state={dehydratedState}>...</Hydrate>
}Options
state: DehydratedState
options: HydrateOptions
Optional
defaultOptions: QueryOptions
context?: React.Context<QueryClient | undefined>
Use this to use a custom React Query context. Otherwise, defaultContext will be used.
[//]: # 'Hydrate'