SSG 助手
非官方测试版翻译
本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →
createSSGHelpers 提供了一组辅助函数,可用于在服务器端预取查询。
tsimport { createSSGHelpers } from '@trpc/react/ssg';const {prefetchQuery,prefetchInfiniteQuery,fetchQuery,fetchInfiniteQuery,dehydrate,queryClient,} = await createSSGHelpers({router: appRouter,ctx: createContext,transformer: superjson, // optional - adds superjson serialization});
tsimport { createSSGHelpers } from '@trpc/react/ssg';const {prefetchQuery,prefetchInfiniteQuery,fetchQuery,fetchInfiniteQuery,dehydrate,queryClient,} = await createSSGHelpers({router: appRouter,ctx: createContext,transformer: superjson, // optional - adds superjson serialization});
返回的函数均为 react-query 函数的封装。请查阅相关文档了解更多信息。
Next.js 示例
pages/posts/[id].tsxtsimport { createSSGHelpers } from '@trpc/react/ssg';import { GetServerSidePropsContext, InferGetServerSidePropsType } from 'next';import { createContext, prisma } from 'server/context';import { appRouter } from 'server/routers/_app';import superjson from 'superjson';import { trpc } from 'utils/trpc';export async function getServerSideProps(context: GetServerSidePropsContext<{ id: string }>,) {const ssg = createSSGHelpers({router: appRouter,ctx: await createContext(),transformer: superjson,});const id = context.params?.id as string;/** Prefetching the `post.byId` query here.* `prefetchQuery` does not return the result - if you need that, use `fetchQuery` instead.*/await ssg.prefetchQuery('post.byId', {id,});// Make sure to return { props: { trpcState: ssg.dehydrate() } }return {props: {trpcState: ssg.dehydrate(),id,},};}export default function PostViewPage(props: InferGetServerSidePropsType<typeof getServerSideProps>,) {const { id } = props;// This query will be immediately available as it's prefetched.const postQuery = trpc.useQuery(['post.byId', { id }]);const { data } = postQuery;return (<><h1>{data.title}</h1><em>Created {data.createdAt.toLocaleDateString()}</em><p>{data.text}</p><h2>Raw data:</h2><pre>{JSON.stringify(data, null, 4)}</pre></>);}
pages/posts/[id].tsxtsimport { createSSGHelpers } from '@trpc/react/ssg';import { GetServerSidePropsContext, InferGetServerSidePropsType } from 'next';import { createContext, prisma } from 'server/context';import { appRouter } from 'server/routers/_app';import superjson from 'superjson';import { trpc } from 'utils/trpc';export async function getServerSideProps(context: GetServerSidePropsContext<{ id: string }>,) {const ssg = createSSGHelpers({router: appRouter,ctx: await createContext(),transformer: superjson,});const id = context.params?.id as string;/** Prefetching the `post.byId` query here.* `prefetchQuery` does not return the result - if you need that, use `fetchQuery` instead.*/await ssg.prefetchQuery('post.byId', {id,});// Make sure to return { props: { trpcState: ssg.dehydrate() } }return {props: {trpcState: ssg.dehydrate(),id,},};}export default function PostViewPage(props: InferGetServerSidePropsType<typeof getServerSideProps>,) {const { id } = props;// This query will be immediately available as it's prefetched.const postQuery = trpc.useQuery(['post.byId', { id }]);const { data } = postQuery;return (<><h1>{data.title}</h1><em>Created {data.createdAt.toLocaleDateString()}</em><p>{data.text}</p><h2>Raw data:</h2><pre>{JSON.stringify(data, null, 4)}</pre></>);}