Contexte React pour l’état du thème
Créez un ThemeProvider qui expose le thème actuel et une fonction de basculement à tout l’arbre de composants
Contexte React pour l’état du thème 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.
Créer ThemeContext
Commencez par appeler createContext() avec une valeur par défaut correspondant à la structure de votre contexte : const ThemeContext = createContext({ theme: 'light', toggleTheme: () => {} }). La valeur par défaut est utilisée uniquement lorsqu'un composant lit le contexte sans fournisseur parent, ce qui facilite les tests de composants isolés.
Le composant ThemeProvider
Le composant ThemeProvider est une enveloppe qui contient toute la logique du thème. Il lit la préférence système lors de son montage, gère l'état theme, fournit une fonction toggleTheme et enveloppe les éléments enfants dans ThemeContext.Provider value={{ theme, toggleTheme }}. Placez-le près du sommet de l'arbre de composants.
Consommer le contexte avec useContext
Tout composant descendant peut accéder au thème en appelant useContext(ThemeContext). Cette fonction renvoie la valeur actuelle du contexte, notamment theme et toggleTheme. Le composant est automatiquement rendu à nouveau lorsque le thème change, ce qui le maintient toujours synchronisé sans transmettre les propriétés de proche en proche.
Synchroniser l'attribut de thème avec le DOM
Les variables CSS dépendent d'un attribut data-theme sur l'élément racine. Dans ThemeProvider, ajoutez un useEffect qui s'exécute chaque fois que theme change : document.documentElement.setAttribute('data-theme', theme). Cela relie harmonieusement l'état React et la couche CSS.
Stocker le choix de l'utilisateur dans localStorage
Pour conserver le choix de l'utilisateur après les rechargements de page, écrivez dans localStorage chaque fois que le thème change : localStorage.setItem('theme', theme). Vous pouvez encapsuler cette logique dans une fonction personnalisée useLocalStorage qui renvoie une paire similaire à un état et enregistre automatiquement chaque mise à jour.
Initialiser le thème depuis localStorage
Lors de l'initialisation de l'état du thème, lisez d'abord localStorage : localStorage.getItem('theme'). Si aucune valeur enregistrée n'existe, utilisez la préférence système comme solution de repli via window.matchMedia('(prefers-color-scheme: dark)').matches. Cette initialisation ne s'exécute qu'une seule fois lors du montage.
Ordre de priorité du thème
L'ordre de priorité correct, de la plus élevée à la plus faible, est le suivant : la préférence utilisateur enregistrée dans localStorage, puis la préférence du système d'exploitation, puis une valeur par défaut codée en dur, généralement le thème clair. Cet ordre garantit que l'utilisateur garde toujours le contrôle final, tout en respectant la configuration de son OS s'il n'a pas fait de choix explicite dans l'application.
La fonction utilitaire useTheme
Appeler directement useContext(ThemeContext) dans chaque composant expose des détails d'implémentation. Exportez plutôt une fonction useTheme : function useTheme() { return useContext(ThemeContext); }. Les composants importent alors useTheme et l'appellent sans connaître le contexte sous-jacent.
Fournir une fonction de basculement
La fonction toggleTheme bascule entre light et dark : setTheme(prev => prev === 'light' ? 'dark' : 'light'). Exposez-la via le contexte afin que n'importe quel bouton de l'arbre puisse la déclencher. L'état est centralisé ; la logique de basculement est partagée partout.
Mémoriser la valeur du contexte
L'objet représentant la valeur du contexte est recréé à chaque rendu de ThemeProvider. Encapsulez-le dans useMemo pour éviter les rendus superflus de tous les consommateurs du contexte : const value = useMemo(() => ({ theme, toggleTheme }), [theme]). Il s'agit d'une optimisation courante des performances pour les fournisseurs de contexte.
Tester ThemeProvider
Dans les tests, enveloppez les rendus dans un utilitaire personnalisé renderWithTheme qui utilise ThemeProvider comme enveloppe. Vous pouvez également créer un contexte fictif simple pour les tests isolés : ThemeContext.Provider value={{ theme: 'dark', toggleTheme: jest.fn() }}. Vous pouvez ainsi tester les composants avec un état de thème précis.
Ordre de priorité du thème
Quel est l'ordre de priorité correct pour initialiser le thème de l'application, de la plus élevée à la plus faible ?
Récapitulatif de la leçon : contexte React pour l'état du thème
Créez un ThemeContext et un ThemeProvider qui gère l'état du thème, le synchronise avec localStorage et définit data-theme sur le document. Utilisez une fonction utilitaire useTheme pour y accéder simplement. L'ordre de priorité est le suivant : préférence enregistrée, puis préférence système, puis valeur par défaut.
Questions Fréquemment Posées
La leçon « Contexte React pour l’état du thème » est-elle gratuite ?
Oui — le texte complet de « Contexte React pour l’état du thème » 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 « Contexte React pour l’état du thème » ?
Créez un ThemeProvider qui expose le thème actuel et une fonction de basculement à tout l’arbre de composants 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 « Contexte React pour l’état du thème » ?
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
- Détecter le thème de couleurs du système
- Variables CSS pour changer de thème
- Contexte React pour l’état du thème
- Conserver le thème et éviter le flash