@suspensive/react-query-4
Version:
Suspensive interfaces for @tanstack/react-query@4
105 lines (104 loc) • 3.68 kB
text/typescript
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
import { HydrateProps, OmitKeyof, QueryClient, QueryOptions, UseInfiniteQueryOptions, WithRequired } from "@tanstack/react-query";
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.cts.map