Queries, mutationer og subscriptions
Brug tRPCs typede queries og mutationer fra React-komponenter med fuld autocomplete og fejltyper.
Queries, mutationer og subscriptions er en gratis React Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i React Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. React Academy-kurset indeholder 4 lektioner i alt.
Definition af en query-procedure
Kæd .input(zodSchema).query(async ({ input, ctx }) => ...) på publicProcedure. Håndteringen modtager det validerede input og forespørgslens kontekst. Returnér en vilkårlig serialiserbar værdi: et objekt, en array eller en primitiv værdi.
Returtypen udledes automatisk og bliver datatypen for det tilsvarende useQuery-hook på klienten.
Kald af en query fra React
trpc.post.getById.useQuery({ id: '1' }) kalder getById-proceduren i post-routeren. Hooket returnerer det velkendte resultatobjekt fra React Query: { data, isLoading, isError, refetch }.
Inputobjektet er statisk typet: Hvis du sender { id: 123 }, når skemaet forventer en streng, får du en TypeScript-fejl, som opdages under udviklingen.
Definition af en mutationsprocedure
Brug .input(zodSchema).mutation(async ({ input, ctx }) => ...) til skrivehandlinger på serveren: oprettelse, opdatering eller sletning af data. Mutationer kaldes eksplicit i stedet for at køre ved montering.
Mutationshåndteringen har adgang til hele forespørgslens kontekst via ctx, herunder sessionen fra NextAuth.
Kald af en mutation fra React
const { mutate, isLoading, error } = trpc.post.create.useMutation(). Kald mutate({ title: 'Ny', content: '...' }) for at udløse mutationen. Ligesom React Query's useMutation kører den ikke ved montering.
Send onSuccess- og onError-callbacks til useMutation-indstillingerne for sideeffekter efter mutationen.
Ugyldiggørelse af cachen efter en mutation
Hvis du vil opdatere query-data efter en vellykket mutation, skal du bruge tRPC's hjælpehook: const utils = trpc.useUtils(). Kald utils.post.getAll.invalidate() i onSuccess for at udløse en ny hentning af postlisten.
Dette svarer i tRPC til React Query's queryClient.invalidateQueries() og følger det samme mønster med forældelse og ny hentning.
Inputvalidering med Zod
tRPC bruger som standard Zod til inputvalidering. Zod-skemaet køres på serveren under kørsel og afviser ugyldigt input, før det når din håndtering. Det samme skema leverer TypeScript-typer til klienten.
Denne dobbelte rolle (validering under kørsel + TypeScript-typer) fjerner dobbeltarbejde: Du definerer aftalen én gang i Zod og får begge sikkerhedsgarantier automatisk.
Batching af forespørgsler med httpBatchLink
Som standard bruger tRPC httpBatchLink, der samler flere samtidige tRPC-forespørgsler i én HTTP-forespørgsel. Flere useQuery-kald i den samme komponents gengivelsescyklus sendes og behandles samlet.
Det reducerer netværksbelastningen markant sammenlignet med separate HTTP-forespørgsler for hver query på en side med flere datakrav.
Oversigt over tRPC-subscriptions
Definér en subscription-procedure: publicProcedure.subscription(async function*() { while (true) { yield await nextEvent(); } }). Subscriptions bruger asynkrone generatorer og kræver en WebSocket-transport.
Subscriptions er ideelle til funktioner i realtid: direkte notifikationer, markører til samarbejdende redigering eller streamede AI-svar.
Opsætning af WebSocket-transport
Erstat httpBatchLink med en kombination af httpBatchLink og wsLink ved hjælp af splitLink: send subscriptions til wsLink og queries/mutationer til httpBatchLink. Opret WebSocket-klienten med createWSClient({ url: 'ws://localhost:3000' }).
Denne hybride transport betyder, at de fleste forespørgsler bruger effektiv HTTP-batching, mens subscriptions bruger vedvarende WebSocket-forbindelser.
Kald af subscriptions fra React
trpc.notifications.onNew.useSubscription(undefined, { onData: (notification) => addToList(notification), onError: console.error }) abonnerer på proceduren. onData-callbacken kaldes for hver værdi, proceduren leverer.
Subscriptionen oprettes automatisk igen, hvis WebSocket-forbindelsen afbrydes og genoprettes.
Kombination af queries, mutationer og subscriptions
En side med en liste i realtid kan bruge en query til at indlæse den oprindelige liste, en mutation til at tilføje et element og en subscription til at modtage nye elementer fra andre brugere i realtid. Alle tre er typet ud fra den samme AppRouter og kan kombineres naturligt.
Strategien for ugyldiggørelse af cachen afhænger af, om du foretrækker en fuld ny hentning (ugyldiggør efter en mutation) eller opdateringer af cachen (utils.post.getAll.setData).
tRPC-mutation og ugyldiggørelse af cachen
Hvilken tRPC-hjælpemetode udløser en ny hentning af en query, efter at en mutation er gennemført?
Opsummering af lektionen
Definér queries med .query() og mutationer med .mutation(), som begge valideres af Zod-skemaer. På klienten skal du bruge trpc.router.procedure.useQuery() og useMutation(). Ugyldiggør queries efter en mutation med utils.procedure.invalidate(). Subscriptions bruger asynkrone generatorer og kræver wsLink som WebSocket-transport.
httpBatchLink samler som standard samtidige queries i én HTTP-forespørgsel.
Lær React med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 88
- Lektioner
- 324
Ofte stillede spørgsmål
Er lektionen “Queries, mutationer og subscriptions” gratis?
Ja — hele teksten til “Queries, mutationer og subscriptions” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af React Academy-kurset, skal du opgradere til CoddyKit PRO. React Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Queries, mutationer og subscriptions”?
Brug tRPCs typede queries og mutationer fra React-komponenter med fuld autocomplete og fejltyper. Du øver dig i React Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på React Academy?
Der kræves ingen tidligere erfaring. React Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Queries, mutationer og subscriptions”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne React Academy-lektion?
Ja. Alle React Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Problemet, som tRPC løser
- Opsætning af tRPC med React og Next.js
- Queries, mutationer og subscriptions
- Integration af tRPC med React Query og Auth