useQueries()
Denna sida har översatts av PageTurner AI (beta). Inte officiellt godkänd av projektet. Hittade du ett fel? Rapportera problem →
Hooken useQueries låter dig hämta ett variabelt antal queries samtidigt med endast ett hook-anrop.
Huvudanvändningsområdet för denna hook är att kunna hämta flera queries, vanligtvis av samma typ. Till exempel: om du hämtar en lista med todo-id:n kan du sedan mappa över dem i en useQueries-hook som anropar en byId-endpoint för att hämta detaljer för varje todo.
Även om det är möjligt att hämta flera olika typer i en useQueries-hook finns det inte mycket fördel jämfört med flera useQuery-anrop, såvida du inte använder suspense-alternativet. Anledningen är att useQueries kan utlösa suspense parallellt medan flera useQuery-anrop skulle ske i serie.
Användning
Hooken useQueries fungerar på samma sätt som @tanstack/query useQueries. Den enda skillnaden är att istället för att skicka ett objekt med en queries-array, skickar du en callback-funktion som tar emot en t-proxy och returnerar en array med queries.
När du använder httpBatchLink eller wsLink kommer nedanstående att resultera i endast 1 HTTP-anrop till din server. Dessutom, om den underliggande proceduren använder något som Prismas findUnique(), kommer den automatiskt batch-köra och göra exakt 1 databasfråga.
tsximport {trpc } from './utils/trpc';constComponent = (props : {postIds : string[] }) => {constpostQueries =trpc .useQueries ((t ) =>props .postIds .map ((id ) =>t .post .byId ({id })),);return <>{/* [...] */}</>;};
tsximport {trpc } from './utils/trpc';constComponent = (props : {postIds : string[] }) => {constpostQueries =trpc .useQueries ((t ) =>props .postIds .map ((id ) =>t .post .byId ({id })),);return <>{/* [...] */}</>;};
Ange alternativ för enskilda queries
Du kan också skicka med vanliga query-alternativ som andra parameter till valfritt query-anrop i arrayen, t.ex. enabled, suspense, refetchOnWindowFocus osv. För fullständig översikt av alla tillgängliga alternativ, se dokumentationen för tanstack useQuery.
tsximport {trpc } from './utils/trpc';constComponent = () => {const [post ,greeting ] =trpc .useQueries ((t ) => [t .post .byId ({id : '1' }, {enabled : false }),t .greeting ({text : 'world' }),]);constonButtonClick = () => {post .refetch ();};return (<div ><h1 >{post .data &&post .data .title }</h1 ><p >{greeting .data ?.message }</p ><button onClick ={onButtonClick }>Click to fetch</button ></div >);};
tsximport {trpc } from './utils/trpc';constComponent = () => {const [post ,greeting ] =trpc .useQueries ((t ) => [t .post .byId ({id : '1' }, {enabled : false }),t .greeting ({text : 'world' }),]);constonButtonClick = () => {post .refetch ();};return (<div ><h1 >{post .data &&post .data .title }</h1 ><p >{greeting .data ?.message }</p ><button onClick ={onButtonClick }>Click to fetch</button ></div >);};
Kontext
Du kan också skicka med en valfri React Query-kontext för att åsidosätta standardinställningarna.
tsxconst [post ,greeting ] =trpc .useQueries ((t ) => [t .post .byId ({id : '1' }),t .greeting ({text : 'world' })],myCustomContext ,);
tsxconst [post ,greeting ] =trpc .useQueries ((t ) => [t .post .byId ({id : '1' }),t .greeting ({text : 'world' })],myCustomContext ,);