UNPKG

@suspensive/react-query-4

Version:

Suspensive interfaces for @tanstack/react-query@4

105 lines (104 loc) 3.68 kB
import { HydrateProps, OmitKeyof, QueryClient, QueryOptions, UseInfiniteQueryOptions, WithRequired } from "@tanstack/react-query"; import * as _$react_jsx_runtime0 from "react/jsx-runtime"; import { ReactNode } from "react"; //#region src/QueriesHydration.d.ts /** * A server component that fetches multiple queries on the server and hydrates them to the client. * * @experimental This component is experimental and may be changed or removed in the future. * * @description * QueriesHydration is designed for React Server Components (RSC). * It pre-fetches multiple queries on the server side and automatically hydrates * the data to the client, enabling seamless data synchronization between server and client. * * When errors occur during server-side fetching, the component gracefully falls back * to client-side rendering, ensuring your application remains resilient. * * @example * ```tsx * // app/page.tsx (Server Component) * import { Suspense } from 'react' * import { QueriesHydration } from '@suspensive/react-query' * import { queryOptions } from '@tanstack/react-query' * * const userQueryOptions = (userId: string) => queryOptions({ * queryKey: ['user', userId], * queryFn: () => fetchUser(userId) * }) * * const postsQueryOptions = () => queryOptions({ * queryKey: ['posts'], * queryFn: () => fetchPosts() * }) * * export default function Page({ userId }: { userId: string }) { * return ( * <> * <Suspense fallback={<div>Loading user...</div>}> * <QueriesHydration queries={[userQueryOptions(userId)]}> * <UserProfile /> * </QueriesHydration> * </Suspense> * * <Suspense fallback={<div>Loading posts...</div>}> * <QueriesHydration queries={[postsQueryOptions()]}> * <PostsList /> * </QueriesHydration> * </Suspense> * </> * ) * } * ``` * * @example * ```tsx * // With custom error fallback * <Suspense fallback={<div>Loading user...</div>}> * <QueriesHydration * queries={[userQueryOptions(userId)]} * skipSsrOnError={{ fallback: <div>Fetching on client...</div> }} * > * <UserProfile /> * </QueriesHydration> * </Suspense> * ``` * * @see {@link https://suspensive.org/docs/react-query/QueriesHydration Documentation} */ declare function QueriesHydration({ queries, children, queryClient, skipSsrOnError, timeout, ...props }: { /** * The QueryClient instance to use for fetching queries. */ queryClient?: QueryClient; /** * An array of query options or infinite query options to be fetched on the server. Each query must include a `queryKey`. * You can mix regular queries and infinite queries in the same array. */ queries: (WithRequired<QueryOptions<any, any, any, any>, 'queryKey'> | WithRequired<UseInfiniteQueryOptions<any, any, any, any, any>, 'queryKey'>)[]; /** * Controls error handling behavior: * - `true` (default): Skips SSR and falls back to client-side rendering when server fetch fails * - `false`: Proceeds with SSR without hydration (retry fetching on client component server rendering) * - `{ fallback: ReactNode }`: Skips SSR with custom fallback UI during client-side rendering */ skipSsrOnError?: boolean | { fallback: ReactNode; }; /** * The timeout in milliseconds for the query. * If the query takes longer than the timeout, it will be considered as an error. * When not set, no timeout is applied. */ timeout?: number; } & OmitKeyof<HydrateProps, 'state'>): Promise<_$react_jsx_runtime0.JSX.Element>; //#endregion export { QueriesHydration }; //# sourceMappingURL=QueriesHydration.d.mts.map