Hooks useQuery et useMutation
Récupérez des données avec useQuery, exécutez des mutations avec useMutation et gérez les états de chargement, d’erreur et de données
Hooks useQuery et useMutation est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage React Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours React Academy comprend 4 leçons au total.
Définir une requête avec gql
La balise de modèle gql de @apollo/client analyse une chaîne de requête GraphQL en DocumentNode lors du chargement du module. Définissez les requêtes en dehors des composants : const GET_USERS = gql`query GetUsers { users { id name email } }`.
Remarque : dans le code de production, utilisez des chaînes entre apostrophes simples enveloppées par gql en tant que modèle balisé. La balise gql accepte une syntaxe de littéral de modèle dans le code source JavaScript.
Valeurs renvoyées par useQuery
useQuery(GET_USERS) renvoie { loading, error, data, refetch, fetchMore, networkStatus }. loading vaut true pendant la récupération initiale. error contient les erreurs GraphQL ou réseau éventuelles. data contient le résultat de la requête correspondant à sa structure.
Vérifiez d'abord loading et error avant d'accéder à data afin d'éviter d'afficher des valeurs nulles.
Schémas d'interface de chargement et d'erreur
Affichez un composant squelette tant que loading vaut true. Affichez un message d'erreur si error est défini (accédez à error.message pour obtenir le texte de l'erreur). N'affichez le contenu réel que lorsque data est défini et loading vaut false.
Ce schéma à trois états (loading / error / data) constitue la structure standard d'un composant Apollo Client.
Accéder aux données d'une requête
L'objet data reproduit la structure de la requête GraphQL. Pour query { users { id name } }, accédez à data.users, qui est un tableau d'objets {id, name}. Les types TypeScript correspondent si vous utilisez graphql-codegen pour générer des hooks typés.
Sans graphql-codegen, data est typé comme any. Avec graphql-codegen, useQuery renvoie automatiquement des données entièrement typées.
Variables dans useQuery
Transmettez les variables comme deuxième argument : useQuery(GET_USER, { variables: { id: userId } }). La requête est automatiquement réexécutée lorsque userId change, comme avec un tableau de dépendances de useEffect.
Apollo Client met en cache séparément chaque combinaison unique de requête et de variables ; ainsi, GET_USER avec id: "1" et GET_USER avec id: "2" possèdent des entrées de cache indépendantes.
Ignorer une requête
Transmettez skip: true dans les options pour empêcher l'exécution de la requête : useQuery(GET_USER, { skip: !userId }). Apollo n'envoie pas la requête lorsque skip vaut true ; loading vaut false et data vaut undefined.
C'est l'équivalent Apollo de la clé null de SWR et de l'option enabled: false de React Query.
Effectuer manuellement une nouvelle récupération
La fonction refetch renvoyée par useQuery déclenche une requête réseau quelle que soit la politique de récupération. Appelez refetch() après une action utilisateur susceptible d'avoir modifié les données du serveur, par exemple après la soumission d'un formulaire.
Transmettez de nouvelles variables à refetch : refetch({ id: newId }) pour effectuer une nouvelle récupération avec des paramètres différents.
Suivre l'état du réseau
Transmettez notifyOnNetworkStatusChange: true dans les options pour recevoir des mises à jour lorsque l'état du réseau change (récupération, nouvelle récupération, interrogation périodique, etc.). Le champ networkStatus contient un code numérique de l'énumération NetworkStatus.
Cela permet d'afficher un indicateur discret de « mise à jour » lorsqu'une nouvelle récupération en arrière-plan est en cours, sans masquer les données actuelles.
Signature de useMutation
useMutation(CREATE_USER) renvoie [mutateFunction, { loading, error, data, reset }]. La fonction de mutation est appelée lorsque l'utilisateur envoie un formulaire. Elle renvoie une Promise contenant { data, errors }.
Appelez mutate({ variables: { name: 'Alice', email: 'alice@example.com' } }) pour transmettre les données d'entrée à la mutation.
Fonctions de rappel onCompleted et onError
Transmettez onCompleted: (data) => navigate('/dashboard') et onError: (error) => showToast(error.message) aux options de useMutation. Ces fonctions de rappel sont exécutées une fois la mutation résolue ou rejetée.
onCompleted reçoit les données du résultat de la mutation, ce qui est utile pour déclencher une navigation, afficher des messages de réussite ou réinitialiser des formulaires.
Réponse optimiste dans useMutation
L'option optimisticResponse dans l'appel à mutate écrit immédiatement un résultat synthétique dans le cache, avant la réponse du serveur. Apollo affiche instantanément les données optimistes, puis les remplace par la réponse réelle du serveur dès son arrivée.
Si la mutation échoue, Apollo restaure automatiquement l'état du cache antérieur à l'optimisme, ce qui maintient la cohérence de l'interface.
Option skip de useQuery
Que devient un appel à useQuery lorsqu'on lui transmet skip: true ?
Récapitulatif de la leçon
Définissez les requêtes avec la balise gql, appelez useQuery(QUERY, { variables, skip }) et gérez les états loading/error/data. useMutation renvoie une fonction de déclenchement et un objet d'état ; appelez cette fonction avec des variables et gérez les résultats via onCompleted et onError. Les réponses optimistes mettent immédiatement à jour le cache, avec une restauration automatique en cas d'échec.
L'option skip et la nouvelle récupération déclenchée par les variables permettent de gérer le chargement conditionnel et paramétré des données.
Questions Fréquemment Posées
La leçon « Hooks useQuery et useMutation » est-elle gratuite ?
Oui — le texte complet de « Hooks useQuery et useMutation » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours React Academy, passe à CoddyKit PRO. Le cours React Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Hooks useQuery et useMutation » ?
Récupérez des données avec useQuery, exécutez des mutations avec useMutation et gérez les états de chargement, d’erreur et de données Tu pratiques React Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer React Academy ?
Aucune expérience préalable n'est requise. React Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Hooks useQuery et useMutation » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon React Academy ?
Oui. Chaque leçon React Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Fondamentaux de GraphQL pour les développeurs React
- Configurer Apollo Client dans React
- Hooks useQuery et useMutation
- Cache Apollo : normalisation et mises à jour