0Pricing
React Academy · Leçon

Atomes dérivés et asynchrones

Composez des atomes dérivés à partir d’autres atomes et créez des atomes asynchrones intégrés à Suspense

Atomes dérivés et asynchrones 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.

Atomes dérivés en lecture seule

Créez un atome dérivé en transmettant une fonction d'accès : const doubleAtom = atom(get => get(countAtom) * 2). Cet atome ne stocke aucune valeur : il la recalcule chaque fois que countAtom change.

Les atomes dérivés sont toujours à jour, sans aucune synchronisation manuelle. Ils constituent l'équivalent Jotai des propriétés calculées.

Suivi automatique des dépendances

Jotai suit les atomes auxquels on accède dans la fonction d'accès et réévalue automatiquement l'atome dérivé lorsque l'un d'eux change. Vous n'avez pas besoin de déclarer explicitement les dépendances.

Si la fonction d'accès appelle get(atomA) et get(atomB), l'atome dérivé est mis à jour chaque fois que atomA ou atomB change.

Atomes dérivés accessibles en écriture

Un atome dérivé accessible en écriture possède à la fois une fonction d'accès et une fonction setter : atom(get => get(baseAtom).toUpperCase(), (get, set, newValue) => set(baseAtom, newValue.toLowerCase())). La lecture renvoie la valeur transformée ; l'écriture la transforme et la réenregistre.

Ce modèle permet une transformation bidirectionnelle des données sans exposer directement l'atome de base.

Atomes asynchrones avec des promesses

La fonction d'accès peut être asynchrone : const userAtom = atom(async get => { const id = get(userIdAtom); return await fetchUser(id); }). Jotai accepte nativement les promesses renvoyées par les fonctions d'accès des atomes.

Lorsque userIdAtom change, Jotai exécute automatiquement à nouveau la fonction d'accès asynchrone et le composant qui l'utilise est suspendu pendant la récupération.

Atomes asynchrones et React Suspense

Les atomes asynchrones s'intègrent parfaitement à React Suspense. Encapsulez le composant qui les utilise dans une limite Suspense avec une solution de repli. Le composant est suspendu tant que la promesse est en attente, puis s'affiche lorsqu'elle est résolue.

Cela élimine la gestion manuelle de l'état de chargement dans le composant : aucun indicateur isLoading et aucun useEffect pour récupérer les données.

loadable : désactiver Suspense

Importez loadable depuis jotai/utils. Enveloppez un atome asynchrone : const loadableUserAtom = loadable(userAtom). Les composants qui lisent loadableUserAtom reçoivent {state: 'loading'}, {state: 'hasData', data: user} ou {state: 'hasError', error}, sans être suspendus.

Utilisez loadable lorsque vous devez afficher directement un état de chargement personnalisé plutôt que de vous appuyer sur une limite Suspense.

Réinitialiser les atomes

L'utilitaire atomWithReset de jotai/utils crée un atome qui peut être réinitialisé à sa valeur initiale au moyen du symbole RESET. Cette approche est plus claire que de suivre manuellement la valeur initiale et de la réappliquer.

Dans les formulaires, réinitialisez tous les atomes de champs lors de l'envoi ou de l'annulation en appelant chaque setter avec RESET dans un gestionnaire unique.

Chaînage des atomes

Un atome dérivé peut lire plusieurs autres atomes : const summaryAtom = atom(get => ({ user: get(userAtom), settings: get(settingsAtom), count: get(countAtom) })). Cela crée une référence stable unique qui est mise à jour lorsqu'une dépendance change.

Les composants qui ont uniquement besoin du résumé s'abonnent à summaryAtom plutôt qu'aux trois atomes individuels.

Atomes conditionnels

Les atomes dérivés peuvent lire conditionnellement différents atomes : const activeDataAtom = atom(get => get(modeAtom) === 'A' ? get(dataAAtom) : get(dataBAtom)). Lorsque modeAtom change, l'atome dérivé change automatiquement de source de données.

Jotai s'abonne à nouveau au bon atome lors de chaque évaluation, ce qui garantit l'absence de données obsolètes provenant de la branche inactive.

Gestion des erreurs des atomes asynchrones

Si la fonction d'accès d'un atome asynchrone lève une erreur ou rejette sa promesse, l'erreur est propagée jusqu'à la limite d'erreur React la plus proche lorsqu'il est utilisé avec Suspense. Avec loadable, l'erreur apparaît dans le champ state.error pour être traitée directement.

En code de production, associez toujours les atomes asynchrones à ErrorBoundary ou enveloppez-les avec loadable.

Performances des atomes dérivés

Les atomes dérivés mémorisent leur dernier résultat. Si tous les atomes dont ils dépendent renvoient les mêmes valeurs que lors de l'évaluation précédente, l'atome dérivé renvoie la même référence et aucun composant en aval n'est rendu à nouveau.

Pour les dérivations coûteuses, comme les transformations de grands tableaux, cette mémorisation offre des gains de performance importants sans configuration supplémentaire.

Intégration des atomes asynchrones et de Suspense

Que devient un composant qui lit un atome asynchrone pendant que sa promesse est en attente ?

Récapitulatif de la leçon

Les atomes dérivés calculent des valeurs à partir d'autres atomes au moyen de fonctions d'accès, avec un suivi automatique des dépendances. Les atomes asynchrones utilisent des fonctions d'accès asynchrones et s'intègrent à React Suspense par défaut ; utilisez loadable depuis jotai/utils pour désactiver ce comportement et gérer directement les états de chargement et d'erreur.

Les atomes dérivés accessibles en écriture permettent des transformations bidirectionnelles, et les atomes conditionnels changent dynamiquement de source de données en fonction des valeurs d'autres atomes.

Questions Fréquemment Posées

La leçon « Atomes dérivés et asynchrones » est-elle gratuite ?

Oui — le texte complet de « Atomes dérivés et asynchrones » 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 « Atomes dérivés et asynchrones » ?

Composez des atomes dérivés à partir d’autres atomes et créez des atomes asynchrones intégrés à Suspense 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 « Atomes dérivés et asynchrones » ?

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

  1. Atomes : unité d’état dans Jotai
  2. Lire et écrire des atomes avec useAtom
  3. Atomes dérivés et asynchrones
  4. Jotai, Zustand ou Context : lequel choisir
← Retour à React Academy