0Pricing
React Academy · Lektion

React Context für den Theme-Zustand

Einen ThemeProvider erstellen, der das aktuelle Theme und eine Umschaltfunktion im gesamten Komponentenbaum bereitstellt

React Context für den Theme-Zustand ist eine kostenlose React Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des React Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.

ThemeContext erstellen

Beginnen Sie, indem Sie createContext() mit einem Standardwert aufrufen, der dem Aufbau Ihres Contexts entspricht: const ThemeContext = createContext({ theme: 'light', toggleTheme: () => {} }). Der Standardwert wird nur verwendet, wenn eine Komponente den Context ohne einen übergeordneten Provider liest. Das ist hilfreich, um isolierte Komponenten zu testen.

Die ThemeProvider-Komponente

Die ThemeProvider-Komponente ist ein Wrapper, der die gesamte Theme-Logik kapselt. Sie liest beim Mounten die Systemeinstellung aus, verwaltet den theme-State, stellt eine toggleTheme-Funktion bereit und umschließt die Children mit ThemeContext.Provider value={{ theme, toggleTheme }}. Platzieren Sie sie möglichst weit oben in Ihrem Komponentenbaum.

Context mit useContext verwenden

Jede untergeordnete Komponente kann auf das Theme zugreifen, indem sie useContext(ThemeContext) aufruft. Dadurch erhält sie den aktuellen Context-Wert einschließlich theme und toggleTheme. Die Komponente wird automatisch neu gerendert, wenn sich das Theme ändert, und bleibt so ohne Prop Drilling stets synchron.

data-theme mit dem DOM synchronisieren

CSS-Variablen hängen von einem data-theme-Attribut am Root-Element ab. Fügen Sie in ThemeProvider einen useEffect hinzu, der immer dann ausgeführt wird, wenn sich theme ändert: document.documentElement.setAttribute('data-theme', theme). Dadurch werden der React-State und die CSS-Ebene nahtlos miteinander verbunden.

Benutzerüberschreibung in localStorage speichern

Um die Auswahl des Benutzers über das Neuladen von Seiten hinweg zu speichern, schreiben Sie bei jeder Theme-Änderung in localStorage: localStorage.setItem('theme', theme). Sie können diese Logik in einem benutzerdefinierten useLocalStorage-Hook kapseln, der ein zustandsähnliches Wertepaar zurückgibt und jede Aktualisierung automatisch speichert.

Theme aus localStorage initialisieren

Lesen Sie beim Initialisieren des Theme-States zuerst aus localStorage: localStorage.getItem('theme'). Wenn kein gespeicherter Wert vorhanden ist, greifen Sie über window.matchMedia('(prefers-color-scheme: dark)').matches auf die Systemeinstellung zurück. Diese Initialisierung wird nur einmal beim Mounten ausgeführt.

Prioritätsreihenfolge des Themes

Die korrekte Priorität von hoch nach niedrig lautet: die in localStorage gespeicherte Benutzereinstellung, anschließend die Systemeinstellung des Betriebssystems und schließlich ein fest codierter Standardwert, normalerweise „light“. Diese Reihenfolge stellt sicher, dass der Benutzer immer die letzte Kontrolle hat und zugleich die Konfiguration des Betriebssystems berücksichtigt wird, wenn er in der App noch keine ausdrückliche Auswahl getroffen hat.

Der praktische useTheme-Hook

Wenn Sie in jeder Komponente direkt useContext(ThemeContext) aufrufen, machen Sie Implementierungsdetails sichtbar. Exportieren Sie stattdessen einen useTheme-Hook: function useTheme() { return useContext(ThemeContext); }. Komponenten importieren nun useTheme und rufen ihn auf, ohne die zugrunde liegende Context-Implementierung kennen zu müssen.

Eine Umschaltfunktion bereitstellen

Die Funktion toggleTheme wechselt zwischen light und dark: setTheme(prev => prev === 'light' ? 'dark' : 'light'). Stellen Sie sie über den Context bereit, damit jeder Button im Komponentenbaum sie auslösen kann. Der State befindet sich an einer zentralen Stelle, und die Umschaltlogik wird überall gemeinsam verwendet.

Den Context-Wert mit useMemo speichern

Das Context-Wertobjekt wird bei jedem Rendern von ThemeProvider neu erstellt. Schließen Sie es in useMemo ein, um unnötige erneute Renderings aller Context-Konsumenten zu verhindern: const value = useMemo(() => ({ theme, toggleTheme }), [theme]). Das ist eine gängige Performance-Optimierung für Context-Provider.

ThemeProvider testen

Umschließen Sie in Tests die Render-Aufrufe mit einer benutzerdefinierten renderWithTheme-Utility, die ThemeProvider als Wrapper verwendet. Sie können auch einen einfachen Mock-Context für isolierte Tests erstellen: ThemeContext.Provider value={{ theme: 'dark', toggleTheme: jest.fn() }}. So können Sie Komponenten in einem bestimmten Theme-State testen.

Prioritätsreihenfolge des Themes

Wie lautet die korrekte Prioritätsreihenfolge für die Initialisierung des App-Themes, von der höchsten zur niedrigsten Priorität?

Lektionszusammenfassung: React Context für den Theme-State

Erstellen Sie einen ThemeContext und einen ThemeProvider, der den Theme-State verwaltet, ihn mit localStorage synchronisiert und data-theme im Dokument setzt. Verwenden Sie für einen übersichtlichen Zugriff einen praktischen useTheme-Hook. Die Prioritätsreihenfolge lautet: gespeicherte Einstellung, Systemeinstellung, Standardwert.

Häufig gestellte Fragen

Ist die Lektion „React Context für den Theme-Zustand“ kostenlos?

Ja — der vollständige Text von „React Context für den Theme-Zustand“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des React Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der React Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „React Context für den Theme-Zustand“?

Einen ThemeProvider erstellen, der das aktuelle Theme und eine Umschaltfunktion im gesamten Komponentenbaum bereitstellt Du übst React Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um React Academy zu starten?

Keine Vorkenntnisse erforderlich. React Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.

Wie lange dauert die Lektion „React Context für den Theme-Zustand“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser React Academy-Lektion Code schreiben und ausführen?

Ja. Jede React Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Systemfarbschema erkennen
  2. CSS-Variablen für den Theme-Wechsel
  3. React Context für den Theme-Zustand
  4. Theme speichern und Aufblitzen verhindern
← Zurück zu React Academy