React Academy · Les

Queries, mutaties en subscriptions

Gebruik getypeerde queries en mutaties van tRPC vanuit React-componenten met volledige autocomplete en fouttypen

Les 3 van 413 stappen

Queries, mutaties en subscriptions is een gratis React Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject React Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus React Academy bevat in totaal 4 lessen.

Een queryprocedure definiëren

Koppel .input(zodSchema).query(async ({ input, ctx }) => ...) aan publicProcedure. De afhandelaar ontvangt de gevalideerde invoer en de context van het verzoek. Geef elke serialiseerbare waarde terug: een object, array of primitieve waarde.

Het retourtype wordt automatisch afgeleid en wordt het datatype van de bijbehorende useQuery-hook op de client.

Een query vanuit React aanroepen

trpc.post.getById.useQuery({ id: '1' }) roept de getById-procedure in de post-router aan. De hook retourneert het bekende React Query-resultaatobject: { data, isLoading, isError, refetch }.

Het invoerobject is statisch getypeerd: als je { id: 123 } doorgeeft terwijl het schema een tekenreeks verwacht, geeft TypeScript tijdens de ontwikkeling een fout.

Een mutatieprocedure definiëren

Gebruik .input(zodSchema).mutation(async ({ input, ctx }) => ...) voor schrijfbewerkingen aan serverzijde: gegevens aanmaken, bijwerken of verwijderen. Mutaties worden expliciet aangeroepen in plaats van bij het laden van een component te worden uitgevoerd.

De afhandelaar van de mutatie heeft via ctx toegang tot de volledige context van het verzoek, inclusief de sessie uit NextAuth.

Een mutatie vanuit React aanroepen

const { mutate, isLoading, error } = trpc.post.create.useMutation(). Roep mutate({ title: 'New', content: '...' }) aan om de mutatie te activeren. Net als useMutation van React Query wordt deze niet uitgevoerd wanneer de component wordt geladen.

Geef callbacks voor onSuccess en onError door aan de opties van useMutation voor neveneffecten na de mutatie.

De cache na een mutatie ongeldig maken

Gebruik de hulphook van tRPC om querygegevens na een geslaagde mutatie te vernieuwen: const utils = trpc.useUtils(). Roep in onSuccess utils.post.getAll.invalidate() aan om het opnieuw ophalen van de berichtenlijst te starten.

Dit is het tRPC-equivalent van React Query's queryClient.invalidateQueries() en volgt hetzelfde patroon van verouderd markeren en opnieuw ophalen.

Invoer valideren met Zod

tRPC gebruikt standaard Zod voor invoervalidatie. Het Zod-schema wordt tijdens de uitvoering op de server uitgevoerd en weigert ongeldige invoer voordat die de afhandelaar bereikt. Hetzelfde schema levert de TypeScript-typen voor de client.

Deze dubbele rol (validatie tijdens de uitvoering plus TypeScript-typen) voorkomt dubbele definities: je definieert het contract één keer in Zod en krijgt beide veiligheidswaarborgen automatisch.

Verzoeken bundelen met httpBatchLink

Standaard gebruikt tRPC httpBatchLink, dat meerdere gelijktijdige tRPC-verzoeken bundelt tot één HTTP-verzoek. Meerdere useQuery-aanroepen in dezelfde rendercyclus van een component worden samen verzonden en samen verwerkt.

Dit vermindert de netwerkbelasting aanzienlijk ten opzichte van afzonderlijke HTTP-verzoeken voor elke query op een pagina met meerdere gegevensbehoeften.

Overzicht van tRPC-abonnementen

Definieer een abonnementsprocedure: publicProcedure.subscription(async function*() { while (true) { yield await nextEvent(); } }). Abonnementen gebruiken asynchrone generatoren en vereisen een WebSocket-transport.

Abonnementen zijn ideaal voor realtimefuncties: live meldingen, cursors voor gezamenlijk bewerken of gestreamde AI-antwoorden.

WebSocket-transport configureren

Vervang httpBatchLink door een combinatie van httpBatchLink en wsLink met splitLink: stuur abonnementen naar wsLink en query's en mutaties naar httpBatchLink. Maak de WebSocket-client met createWSClient({ url: 'ws://localhost:3000' }).

Dit hybride transport betekent dat de meeste verzoeken efficiënte HTTP-bundeling gebruiken, terwijl abonnementen permanente WebSocket-verbindingen gebruiken.

Abonnementen vanuit React aanroepen

trpc.notifications.onNew.useSubscription(undefined, { onData: (notification) => addToList(notification), onError: console.error }) abonneert zich op de procedure. De callback onData wordt aangeroepen voor elke opgeleverde waarde.

Het abonnement wordt automatisch opnieuw tot stand gebracht als de WebSocket de verbinding verbreekt en opnieuw verbinding maakt.

Query's, mutaties en abonnementen combineren

Een realtime-lijstpagina kan een query gebruiken om de beginlijst te laden, een mutatie om een item toe te voegen en een abonnement om live toevoegingen van andere gebruikers te ontvangen. Alle drie zijn getypeerd aan de hand van dezelfde AppRouter en kunnen vanzelfsprekend worden gecombineerd.

De strategie voor het ongeldig maken van de cache hangt ervan af of je de voorkeur geeft aan alles opnieuw ophalen (ongeldig maken na een mutatie) of de cache bijwerken (utils.post.getAll.setData).

tRPC-mutaties en cache ongeldig maken

Welke tRPC-hulpmethode zorgt ervoor dat een query opnieuw wordt opgehaald nadat een mutatie is geslaagd?

Samenvatting van de les

Definieer query's met .query() en mutaties met .mutation(), die beide door Zod-schema's worden gevalideerd. Gebruik op de client trpc.router.procedure.useQuery() en useMutation(). Maak query's na een mutatie ongeldig met utils.procedure.invalidate(). Abonnementen gebruiken asynchrone generatoren en vereisen wsLink voor WebSocket-transport.

httpBatchLink bundelt standaard gelijktijdige query's tot één HTTP-verzoek.

Gratis beginnen

Leer React met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
88
Lessen
324

Veelgestelde vragen

Is de les “Queries, mutaties en subscriptions” gratis?

Ja — de volledige tekst van “Queries, mutaties en subscriptions” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus React Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus React Academy bevat in totaal 4 lessen.

Wat leer ik in “Queries, mutaties en subscriptions”?

Gebruik getypeerde queries en mutaties van tRPC vanuit React-componenten met volledige autocomplete en fouttypen Je oefent met React Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met React Academy te beginnen?

Ervaring vooraf is niet nodig. React Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.

Hoe lang duurt de les “Queries, mutaties en subscriptions”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over React Academy?

Ja. Elke les over React Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Het probleem dat tRPC oplost
  2. tRPC instellen met React en Next.js
  3. Queries, mutaties en subscriptions
  4. tRPC integreren met React Query en Auth
← Terug naar React Academy