Présentation des liens
Cette page a été traduite par PageTurner AI (bêta). Non approuvée officiellement par le projet. Vous avez trouvé une erreur ? Signaler un problème →
Les liens vous permettent de personnaliser le flux de données entre le client et le serveur tRPC. Chaque lien doit accomplir une seule tâche, soit une modification autonome d'une opération tRPC (requête, mutation ou abonnement), soit un effet secondaire basé sur l'opération (comme la journalisation).
Vous pouvez composer les liens dans un tableau que vous fournissez à la configuration du client tRPC via la propriété links, représentant une chaîne de liens. Le client tRPC exécutera les liens dans l'ordre du tableau links lors d'une requête, puis les exécutera à nouveau en sens inverse lors du traitement de la réponse. Voici une représentation visuelle de la chaîne de liens :
utils/trpc.tstsimport {createTRPCClient ,httpBatchLink ,loggerLink } from '@trpc/client';import type {AppRouter } from './server';export consttrpc =createTRPCClient <AppRouter >({links : [loggerLink (),httpBatchLink ({url : 'http://localhost:3000',}),],});
utils/trpc.tstsimport {createTRPCClient ,httpBatchLink ,loggerLink } from '@trpc/client';import type {AppRouter } from './server';export consttrpc =createTRPCClient <AppRouter >({links : [loggerLink (),httpBatchLink ({url : 'http://localhost:3000',}),],});
Créer un lien personnalisé
Un lien est une fonction conforme au type TRPCLink. Chaque lien se compose de trois parties :
-
Le lien retourne une fonction sans paramètre. C'est la phase d'initialisation où le lien est configuré — elle se produit une fois par application et est utile pour stocker des caches ou d'autres états.
-
Cette fonction retourne une autre fonction recevant un objet avec deux propriétés :
op(l'Operationexécutée par le client) etnext(la fonction appelant le prochain lien de la chaîne). -
Cette fonction retourne finalement une fonction qui renvoie l'
observablefournie par@trpc/server. L'observableaccepte une fonction recevant unobserverqui permet à notre lien de notifier au lien précédent comment traiter le résultat. Dans cette fonction, vous pouvez soit retournernext(op)tel quel, soit vous abonner ànextpour gérer le résultat de l'opération.
Exemple
utils/customLink.tstsximport {TRPCLink } from '@trpc/client';import {observable } from '@trpc/server/observable';import type {AppRouter } from './server';export constcustomLink :TRPCLink <AppRouter > = () => {// here we just got initialized in the app - this happens once per app// useful for storing cache for instancereturn ({next ,op }) => {// this is when passing the result to the next link// each link needs to return an observable which propagates resultsreturnobservable ((observer ) => {console .log ('performing operation:',op );constunsubscribe =next (op ).subscribe ({next (value ) {console .log ('we received value',value );observer .next (value );},error (err ) {console .log ('we received error',err );observer .error (err );},complete () {observer .complete ();},});returnunsubscribe ;});};};
utils/customLink.tstsximport {TRPCLink } from '@trpc/client';import {observable } from '@trpc/server/observable';import type {AppRouter } from './server';export constcustomLink :TRPCLink <AppRouter > = () => {// here we just got initialized in the app - this happens once per app// useful for storing cache for instancereturn ({next ,op }) => {// this is when passing the result to the next link// each link needs to return an observable which propagates resultsreturnobservable ((observer ) => {console .log ('performing operation:',op );constunsubscribe =next (op ).subscribe ({next (value ) {console .log ('we received value',value );observer .next (value );},error (err ) {console .log ('we received error',err );observer .error (err );},complete () {observer .complete ();},});returnunsubscribe ;});};};
Références
Pour des exemples concrets de création de liens, consultez les liens intégrés de tRPC sur GitHub.
Le lien terminal
Le lien terminal est le dernier maillon de la chaîne. Au lieu d'appeler next, il envoie l'opération tRPC composée au serveur tRPC et retourne une OperationResultEnvelope.
Le tableau links que vous ajoutez à la configuration du client tRPC doit contenir au moins un lien, et ce lien doit être terminal. Si links ne comporte pas de lien terminal à la fin, l'opération tRPC ne sera pas envoyée au serveur.
httpBatchLink est le lien terminal recommandé par tRPC.
httpLink, httpBatchStreamLink, httpSubscriptionLink, wsLink et localLink sont d'autres exemples de liens terminaux selon vos besoins.
Gestion du contexte
Lorsqu'une opération traverse votre chaîne de liens, elle conserve un contexte que chaque lien peut lire et modifier. Cela permet aux liens de transmettre des métadonnées utilisées par d'autres maillons dans leur logique d'exécution.
Accédez au contexte actuel et modifiez-le via op.context.
Définissez la valeur initiale du contexte pour une opération spécifique via le paramètre context du hook query ou useQuery (ou mutation, subscription, etc.).
Pour un exemple d'utilisation, consultez Désactiver le traitement par lots pour certaines requêtes.