React Academy · Lektion

Registrering af systemets farveskema

Læs brugerens præference for mørk tilstand i operativsystemet med prefers-color-scheme, og opdatér React-tilstanden, når den ændres.

Lektion 1 af 413 trin

Registrering af systemets farveskema er en gratis React Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i React Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. React Academy-kurset indeholder 4 lektioner i alt.

Medieforespørgslen prefers-color-scheme

CSS-medieforespørgslen prefers-color-scheme registrerer, om brugeren har konfigureret sit operativsystem til at bruge et mørkt eller lyst farvetema. Den accepterer to værdier: dark og light. Denne indstilling angives på operativsystemniveau i systemindstillingerne, ikke i browseren.

CSS-mørketilstand via medieforespørgsel

Du kan anvende mørke typografier udelukkende i CSS ved hjælp af @media (prefers-color-scheme: dark) { ... }. Inde i denne blok tilsidesætter du farver, baggrunde og kanter, så de passer til en mørk palet. Denne tilgang kræver ingen JavaScript og fungerer, selv før React monteres.

window.matchMedia i JavaScript

I JavaScript returnerer window.matchMedia('(prefers-color-scheme: dark)') et MediaQueryList-objekt. Du kan bruge det til programmatisk at læse den aktuelle systemindstilling i React-hooks eller hændelseshåndterere. Det er bindeleddet mellem CSS-medieforespørgsler og din JS-logik.

Læsning af startværdien

Objektet MediaQueryList har egenskaben matches, som returnerer en boolesk værdi. Hvis matches er true, er systemet i mørk tilstand; hvis false, er det i lys tilstand. Du læser typisk værdien én gang ved montering for at initialisere tilstanden for dit tema.

Lytning efter systemændringer

Brugere kan til enhver tid ændre operativsystemets farveskema. Hvis du vil reagere dynamisk, skal du kalde mediaQuery.addEventListener('change', handler), hvor handler modtager den opdaterede MediaQueryListEvent. Hændelsesobjektet har også en boolesk matches-værdi, der afspejler den nye indstilling.

Oprettelse af usePrefersDarkMode-hooket

En ren tilgang er at oprette et brugerdefineret hook ved hjælp af useSyncExternalStore. Hooket abonnerer på mediaQuery.addEventListener og leverer en snapshot-funktion, der returnerer mediaQuery.matches. Det holder hooket synkroniseret med browserens eksterne API uden manuel tilstandshåndtering.

Afmelding ved oprydning

Når din komponent afmonteres, skal du fjerne hændelseslytteren for at undgå hukommelseslækager. I en useEffect-oprydningsfunktion skal du kalde mediaQuery.removeEventListener('change', handler). Med useSyncExternalStore skal abonnementsfunktionen returnere en afmeldingsfunktion, der gør det samme.

Systemindstilling kontra brugerens tilsidesættelse

Systemindstillingen er det, operativsystemet rapporterer. Men brugere vil ofte tilsidesætte appens tema uafhængigt, f.eks. beholde appen lys, mens operativsystemet er i mørk tilstand. Din arkitektur bør skelne mellem systemets standardindstilling og en eksplicit brugertilsidesættelse, der gemmes i localStorage.

Emulering af farveskema i DevTools

Chrome DevTools lader dig emulere indstillinger for farveskemaet uden at ændre operativsystemets indstillinger. Åbn DevTools, gå til fanen Rendering, og find rullemenuen "Emulate CSS media feature prefers-color-scheme". Det er uvurderligt, når du hurtigt vil teste begge temaer under udviklingen.

Respekt for brugerens indstilling som standard

En god implementering af mørketilstand læser systemindstillingen som standardudgangspunkt og anvender den med det samme. Det viser respekt for brugerens tilgængelighedsindstilling. Først når brugeren eksplicit skifter temaet i din app, bør du gemme og bruge en anden tilsidesættelse.

Overvejelser om systemindstillingen ved SSR

På serveren findes window.matchMedia ikke. Hvis du gengiver på serveren, skal du kontrollere med typeof window !== 'undefined', før du kalder matchMedia. I SSR-apps bør du i stedet læse brugerens indstilling fra en cookie eller en HTTP-header for at undgå uoverensstemmelser ved hydrering.

Kontrol af matchMedia-API'et

Hvilken egenskab i et MediaQueryList-objekt fortæller dig, om medieforespørgslen aktuelt matcher?

Opsummering af lektionen: Registrering af systemets farveskema

Medieforespørgslen prefers-color-scheme giver adgang til operativsystemets farveindstilling i både CSS og JavaScript. Brug window.matchMedia til at læse ændringer og lytte efter dem, ryd altid op efter hændelseslyttere, og skeln mellem systemets standardindstillinger og brugerens tilsidesættelser. Emulering i Chrome DevTools gør det hurtigere at teste begge temaer.

Gratis at komme i gang

Lær React med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
88
Lektioner
324

Ofte stillede spørgsmål

Er lektionen “Registrering af systemets farveskema” gratis?

Ja — hele teksten til “Registrering af systemets farveskema” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af React Academy-kurset, skal du opgradere til CoddyKit PRO. React Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Registrering af systemets farveskema”?

Læs brugerens præference for mørk tilstand i operativsystemet med prefers-color-scheme, og opdatér React-tilstanden, når den ændres. Du øver dig i React Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på React Academy?

Der kræves ingen tidligere erfaring. React Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “Registrering af systemets farveskema”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne React Academy-lektion?

Ja. Alle React Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Registrering af systemets farveskema
  2. CSS-variabler til skift af tema
  3. React Context til tematilstand
  4. Bevaring af tema og forebyggelse af flash
← Tilbage til React Academy