useQuery()
注意
@trpc/react-query
提供的钩子是 @tanstack/react-query 的一个薄包装器。有关选项和使用模式的详细信息,请参阅其关于 查询 的文档。
tsx
function useQuery(input: TInput,opts?: UseTRPCQueryOptions;)interface UseTRPCQueryOptionsextends UseQueryOptions {trpc: {ssr?: boolean;abortOnUnmount?: boolean;context?: Record<string, unknown>;}}
tsx
function useQuery(input: TInput,opts?: UseTRPCQueryOptions;)interface UseTRPCQueryOptionsextends UseQueryOptions {trpc: {ssr?: boolean;abortOnUnmount?: boolean;context?: Record<string, unknown>;}}
由于 UseTRPCQueryOptions
扩展了 @tanstack/react-query 的 UseQueryOptions
,因此您可以在此处使用它们的任何选项,例如 enabled
、refetchOnWindowFocus
等。我们还有一些 trpc
特定的选项,允许您选择加入或退出特定过程级别的某些行为
trpc.ssr
: 如果在全局配置中设置了ssr: true
,则可以将其设置为 false 以禁用此特定查询的 ssr。请注意,反之则不行,即,如果全局配置设置为 false,则无法在过程中启用 ssr。trpc.abortOnUnmount
: 覆盖全局配置,并选择在卸载时中止查询或不中止查询。trpc.context
: 添加可在链接中使用的额外元数据。
提示
如果您需要设置任何选项,但不想传递任何输入,则可以传递 undefined
。
您会注意到,根据后端 input
架构中的设置,您可以在 input
上获得自动完成。
示例
后端代码
server/routers/_app.tstsx
import { initTRPC } from '@trpc/server';import { z } from 'zod';export const t = initTRPC.create();export const appRouter = t.router({// Create procedure at path 'hello'hello: t.procedure// using zod schema to validate and infer input values.input(z.object({text: z.string().nullish(),}).nullish(),).query((opts) => {return {greeting: `hello ${opts.input?.text ?? 'world'}`,};}),});
server/routers/_app.tstsx
import { initTRPC } from '@trpc/server';import { z } from 'zod';export const t = initTRPC.create();export const appRouter = t.router({// Create procedure at path 'hello'hello: t.procedure// using zod schema to validate and infer input values.input(z.object({text: z.string().nullish(),}).nullish(),).query((opts) => {return {greeting: `hello ${opts.input?.text ?? 'world'}`,};}),});
components/MyComponent.tsxtsx
import { trpc } from '../utils/trpc';export function MyComponent() {// input is optional, so we don't have to pass second argumentconst helloNoArgs = trpc.hello.useQuery();const helloWithArgs = trpc.hello.useQuery({ text: 'client' });return (<div><h1>Hello World Example</h1><ul><li>helloNoArgs ({helloNoArgs.status}):{' '}<pre>{JSON.stringify(helloNoArgs.data, null, 2)}</pre></li><li>helloWithArgs ({helloWithArgs.status}):{' '}<pre>{JSON.stringify(helloWithArgs.data, null, 2)}</pre></li></ul></div>);}
components/MyComponent.tsxtsx
import { trpc } from '../utils/trpc';export function MyComponent() {// input is optional, so we don't have to pass second argumentconst helloNoArgs = trpc.hello.useQuery();const helloWithArgs = trpc.hello.useQuery({ text: 'client' });return (<div><h1>Hello World Example</h1><ul><li>helloNoArgs ({helloNoArgs.status}):{' '}<pre>{JSON.stringify(helloNoArgs.data, null, 2)}</pre></li><li>helloWithArgs ({helloWithArgs.status}):{' '}<pre>{JSON.stringify(helloWithArgs.data, null, 2)}</pre></li></ul></div>);}