/
DME
/
NotesApp
Обзор
Документация
Войти
/
DME
/
NotesApp
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/trpc/react.tsx
64 строки
2 KB
Karasique333
Commit
19 июн 2025, 15:09
19 июн 2025, 15:09
d96c829
Код
Авторство
О чём код?
'use client' import { type QueryClient, QueryClientProvider } from '@tanstack/react-query' import { loggerLink, unstable_httpBatchStreamLink } from '@trpc/client' import { createTRPCReact } from '@trpc/react-query' import { type inferRouterInputs, type inferRouterOutputs } from '@trpc/server' import { useState } from 'react' import SuperJSON from 'superjson' import { getBaseUrl } from '@/lib/utils' import { createQueryClient } from './query-client' import { type AppRouter } from '@/server/api/root' let clientQueryClientSingleton: QueryClient | undefined = undefined const getQueryClient = () => { if (typeof window === 'undefined') { // Server: always make a new query client return createQueryClient() } // Browser: use singleton pattern to keep the same query client return (clientQueryClientSingleton ??= createQueryClient()) } export const api = createTRPCReact<AppRouter>() export type RouterInputs = inferRouterInputs<AppRouter> export type RouterOutputs = inferRouterOutputs<AppRouter> export function TRPCReactProvider(props: { children: React.ReactNode }) { const queryClient = getQueryClient() const [trpcClient] = useState(() => api.createClient({ links: [ loggerLink({ enabled: (op) => process.env.NODE_ENV === 'development' || (op.direction === 'down' && op.result instanceof Error), }), unstable_httpBatchStreamLink({ transformer: SuperJSON, url: getBaseUrl() + '/api/trpc', headers: () => { const headers = new Headers() headers.set('x-trpc-source', 'nextjs-react') return headers }, }), ], }) ) return ( <QueryClientProvider client={queryClient}> <api.Provider client={trpcClient} queryClient={queryClient}> {props.children} </api.Provider> </QueryClientProvider> ) }