本页还没有译文
本页 42 段还没译成日本語,下面显示的是英文原文。TanStack Query Integration
还没翻译译自英文(tanstack.com)本页 42 段都还没译
Important
This integration automates SSR dehydration/hydration and streaming between TanStack Router and TanStack Query. If you haven't read the standard External Data Loading guide, start there.
What you get
- Automatic SSR dehydration/hydration of your
QueryClient - Streaming of queries that resolve during initial server render to the client
- Redirect handling for
redirect()thrown from queries/mutations - Optional provider wrapping with
QueryClientProvider
Installation
The TanStack query integration is a separate package that you need to install:
Setup
Create your router and wire up the integration. Ensure a fresh QueryClient is created per request in SSR environments.
By default, the integration wraps your router with a QueryClientProvider. If you already provide your own provider, pass wrapQueryClient: false and keep your custom wrapper.
You can also pass dehydrateOptions and hydrateOptions to customize how TanStack Query serializes SSR payloads and restores them on the client.
setupRouterSsrQueryIntegration({
router,
queryClient,
dehydrateOptions: {
shouldDehydrateQuery: (query) => query.meta?.ssr !== false,
},
hydrateOptions: {
defaultOptions: {
queries: {
gcTime: 60_000,
},
},
},
})Common uses for these options:
- Set
hydrateOptions.defaultOptions.queries.gcTimeto control how long hydrated SSR queries stay in the client cache before garbage collection. - Set
dehydrateOptions.shouldDehydrateQueryto exclude queries you do not want serialized into the HTML payload. - Set
dehydrateOptions.serializeDataandhydrateOptions.defaultOptions.deserializeDatawhen your SSR payload needs custom serialization.
import { QueryClient } from '@tanstack/react-query'
import { createRouter } from '@tanstack/react-router'
import { setupRouterSsrQueryIntegration } from '@tanstack/react-router-ssr-query'
import { routeTree } from './routeTree.gen'
export function getRouter() {
const queryClient = new QueryClient()
const router = createRouter({
routeTree,
context: { queryClient },
})
setupRouterSsrQueryIntegration({
router,
queryClient,
hydrateOptions: {
defaultOptions: {
queries: {
gcTime: 5 * 60 * 1000,
},
},
},
})
return router
}SSR behavior and streaming
- During server render, the integration dehydrates initial queries and streams any subsequent queries that resolve while rendering.
- On the client, the integration hydrates the initial state, then incrementally hydrates streamed queries.
- Queries from
useSuspenseQueryor loader prefetches participate in SSR/streaming. PlainuseQuerydoes not execute on the server.
Use in routes
Using useSuspenseQuery vs useQuery
useSuspenseQuery: runs on the server during SSR when its data is required and will be streamed to the client as it resolves.useQuery: does not execute on the server; it will fetch on the client after hydration. Use this for data that is not required for SSR.
Preload with a loader and read with a hook
Preload critical data in the route loader to avoid waterfalls and loading flashes, then read it in the component. The integration ensures server-fetched data is dehydrated and streamed to the client during SSR.
Prefetching and streaming
You can also prefetch with query in a loader without consuming the data in a component. If you return the promise directly from the loader, it will be awaited and thus block the SSR request until the query finishes. If you don't await the promise nor return it, the query will be started on the server and will be streamed to the client without blocking the SSR request.
Note
Previous versions of this guide used queryClient.ensureQueryData and queryClient.prefetchQuery. These methods are now deprecated in TanStack Query in favor of queryClient.query. See the TanStack Query v5 migration guide for more details.
Redirect handling
If a query or mutation throws a redirect(...), the integration intercepts it on the client and performs a router navigation.
- Enabled by default
- Disable with
handleRedirects: falseif you need custom handling
Works with TanStack Start
TanStack Start uses TanStack Router under the hood. The same setup applies, and the integration will stream query results during SSR automatically.