Récupérer des données en React et Next.js, comparé sur une même application

Récupérer des données en React : serveur, TanStack Query, SWR | We.Inc

Choisissez une approche de récupération de données en React grâce à un court quiz, puis comparez les server components, TanStack Query et SWR sur le cache, les mutations et les valeurs par défaut, sur une même application d'exemple.

Récupérez les données côté serveur quand vous le pouvez : dans l'App Router de Next.js, un server component async attend les données avant l'envoi du moindre HTML, sans code de spinner de chargement. Pour des données qui changent pendant que la page est ouverte, utilisez un cache client comme TanStack Query ou SWR, qui gèrent le cache, les nouvelles tentatives et les mutations. Un simple fetch dans useEffect convient aux requêtes ponctuelles.

Quelle approche choisir

Chaque exemple de cette page charge et modifie la même petite liste de notes, donc les différences viennent de l'approche et non de la démo. Répondez aux trois questions ci-dessous pour obtenir une recommandation de départ et l'extrait de code correspondant.

Questions fréquentes

Les requêtes fetch sont-elles mises en cache dans l'App Router de Next.js ?

D'après la documentation actuelle de Next.js, les requêtes fetch ne sont pas mises en cache par défaut et bloquent le rendu jusqu'à leur fin. Les requêtes identiques d'un même rendu sont mémoïsées, et vous activez le cache avec la directive use cache ou diffusez des données fraîches dans Suspense.

Quelles sont les valeurs par défaut importantes de TanStack Query ?

Les données sont périmées immédiatement (staleTime 0), elles sont donc rechargées au montage, au retour sur la fenêtre et à la reconnexion. Les requêtes inutilisées restent en mémoire 5 minutes (gcTime), et les requêtes échouées sont retentées 3 fois avec un backoff exponentiel. Augmentez staleTime si ces rechargements dépassent vos besoins.

TanStack Query ou SWR ?

Les deux mettent en cache par clé et revalident au retour sur la fenêtre et à la reconnexion. TanStack Query intègre davantage d'outils pour les mutations, l'invalidation et les devtools ; SWR a une API plus réduite construite autour de useSWR(key, fetcher). Choisissez-en un par application ; utiliser les deux duplique le cache.

Ai-je encore besoin d'une bibliothèque client avec les server components ?

Souvent pas pour le chargement des pages. Vous en avez besoin quand les données doivent se rafraîchir sans navigation, quand les utilisateurs modifient des données et attendent un retour immédiat, ou pour les listes infinies. Beaucoup d'applications chargent côté serveur et n'utilisent un cache client que sur les écrans interactifs.

Comment vérifier qui est connecté avec Supabase côté serveur ?

Le guide côté serveur de Supabase indique de ne jamais faire confiance à getSession() dans du code serveur. Appelez supabase.auth.getClaims(), qui vérifie la signature du jeton, puis interrogez vos tables ; la sécurité au niveau des lignes (row level security) s'applique toujours à chaque requête.

Le serveur d'abord, puis un cache client là où c'est utile

Le streaming plutôt que l'attente

Pourquoi le simple useEffect ne suffit pas

Les valeurs par défaut qui surprennent

Comportement par défaut

Éviter les cascades côté serveur

Lancer les deux requêtes, puis les attendre ensemble

Appeler les deux fonctions avant d'attendre signifie qu'aucune n'attend l'autre.

Diffuser une partie lente avec Suspense

Le titre est envoyé tout de suite ; la liste de notes arrive en streaming quand ses données sont prêtes.

Supabase dans un server component

Ceci utilise le helper createClient du guide côté serveur de Supabase pour Next.js (lib/supabase/server.ts, construit sur @supabase/ssr). getClaims() vérifie le jeton de l'utilisateur connecté avant l'exécution de la requête.

Notes de l'utilisateur connecté, chargées côté serveur

La sécurité au niveau des lignes de la table notes décide quelles lignes sont renvoyées.

Choisir une approche

Utilisez-vous des server components (par exemple l'App Router de Next.js) ?

Les données doivent-elles se rafraîchir pendant que la page reste ouverte ?

Les utilisateurs modifient-ils ces données à l'écran ?

Oui

Non

Extrait de départ

Copier l'extrait

Chargez-les dans un server component async. Ajoutez un cache client plus tard, uniquement pour les parties qui deviennent interactives.

Utilisez TanStack Query : useQuery pour lire, useMutation pour écrire, et invalidateQueries pour rafraîchir après un changement.

Utilisez SWR : useSWR garde la vue à jour au retour sur la fenêtre et à la reconnexion avec très peu de code.

Un seul fetch dans useEffect suffit ici. Faites le nettoyage avec un drapeau ignore pour qu'une réponse tardive ne puisse pas écraser un état plus récent.

Recommandation : {v}

Server component

TanStack Query

SWR

useEffect et fetch

Commencer gratuitement · Sans carte bancaire

Voir aussi: Guides

Produit

Pour qui

Fonctionnalités

Ressources

Entreprise

Plan du site