React Academy · Lektion

React Context för temats tillstånd

Bygg en ThemeProvider som exponerar aktuellt tema och en växlingsfunktion för hela komponentträdet.

Lektion 3 av 413 steg

React Context för temats tillstånd är en gratis lektion i React Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för React Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i React Academy innehåller totalt 4 lektioner.

Skapa ThemeContext

Börja med att anropa createContext() med ett standardvärde som överensstämmer med kontextens struktur: const ThemeContext = createContext({ theme: 'light', toggleTheme: () => {} }). Standardvärdet används endast när en komponent läser kontexten utan en överordnad Provider, vilket underlättar testning av isolerade komponenter.

ThemeProvider-komponenten

Komponenten ThemeProvider är en omslutande komponent som innehåller all temalogik. Den läser systemets inställning vid montering, hanterar tillståndet theme, tillhandahåller funktionen toggleTheme och omsluter underordnade komponenter i ThemeContext.Provider value={{ theme, toggleTheme }}. Placera den nära toppen av komponentträdet.

Använda kontext med useContext

Alla underordnade komponenter kan komma åt temat genom att anropa useContext(ThemeContext). Detta returnerar det aktuella kontextvärdet, inklusive theme och toggleTheme. Komponenten renderas automatiskt om när temat ändras, så att det alltid hålls synkroniserat utan prop drilling.

Synkronisera data-theme med DOM

CSS-variabler är beroende av attributet data-theme på rotelementet. Lägg till en useEffect i ThemeProvider som körs varje gång theme ändras: document.documentElement.setAttribute('data-theme', theme). Detta skapar en sömlös koppling mellan React-tillståndet och CSS-lagret.

Lagra användarens åsidosättning i localStorage

För att spara användarens val mellan omladdningar av sidan skriver ni till localStorage varje gång temat ändras: localStorage.setItem('theme', theme). Denna logik kan kapslas in i en anpassad hook, useLocalStorage, som returnerar ett tillståndsliknande par och automatiskt sparar varje uppdatering.

Initiera temat från localStorage

När temats tillstånd initieras läser ni först från localStorage: localStorage.getItem('theme'). Om inget sparat värde finns använder ni systemets inställning som reserv via window.matchMedia('(prefers-color-scheme: dark)').matches. Denna initiering körs endast en gång vid montering.

Temats prioriteringsordning

Den korrekta prioriteringen från högst till lägst är: sparad användarinställning i localStorage, därefter operativsystemets inställning och slutligen ett hårdkodat standardvärde, vanligtvis light. Denna ordning säkerställer att användaren alltid har sista ordet, samtidigt som operativsystemets konfiguration respekteras om inget uttryckligt val har gjorts i appen.

Den praktiska useTheme-hooken

Att direkt anropa useContext(ThemeContext) i varje komponent exponerar implementeringsdetaljer. Exportera i stället en useTheme-hook: function useTheme() { return useContext(ThemeContext); }. Komponenterna importerar nu useTheme och anropar den utan att känna till den underliggande kontexten.

Tillhandahålla en växlingsfunktion

Funktionen toggleTheme växlar mellan light och dark: setTheme(prev => prev === 'light' ? 'dark' : 'light'). Exponera den via kontexten så att vilken knapp som helst i komponentträdet kan utlösa den. Tillståndet finns på ett ställe, medan växlingslogiken delas överallt.

Memoisera kontextvärdet

Kontextvärdesobjektet skapas på nytt vid varje rendering av ThemeProvider. Lägg det i useMemo för att förhindra onödiga omrenderingar av alla kontextkonsumenter: const value = useMemo(() => ({ theme, toggleTheme }), [theme]). Detta är en vanlig prestandaoptimering för kontextproviders.

Testa ThemeProvider

I tester kan ni omsluta renderingar i ett anpassat verktyg, renderWithTheme, som använder ThemeProvider som wrapper. Ni kan också skapa en enkel mockad kontext för isolerade tester: ThemeContext.Provider value={{ theme: 'dark', toggleTheme: jest.fn() }}. På så sätt kan komponenter testas i ett specifikt temaläge.

Temats prioriteringsordning

Vilken är den korrekta prioriteringsordningen för att initiera appens tema, från högst till lägst prioritet?

Sammanfattning av lektionen: React Context för temats tillstånd

Skapa en ThemeContext och en ThemeProvider som hanterar temats tillstånd, synkroniserar med localStorage och anger data-theme i dokumentet. Använd en praktisk useTheme-hook för ren och enkel användning. Prioriteringsordningen är: sparad inställning, därefter systemets inställning och slutligen standardvärdet.

Gratis att börja

Lär dig React med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
88
Lektioner
324

Vanliga frågor

Är lektionen ”React Context för temats tillstånd” gratis?

Ja – hela texten till ”React Context för temats tillstånd” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i React Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i React Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”React Context för temats tillstånd”?

Bygg en ThemeProvider som exponerar aktuellt tema och en växlingsfunktion för hela komponentträdet. Ni övar på React Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig React Academy?

Du behöver inga förkunskaper. Utbildningen i React Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”React Context för temats tillstånd”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här React Academy-lektionen?

Ja. Varje React Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Identifiera systemets färgschema
  2. CSS-variabler för temaväxling
  3. React Context för temats tillstånd
  4. Spara tema och förhindra bildflimmer
← Tillbaka till React Academy