0Pricing
React Academy · Lekcja

Wykrywanie schematu kolorów systemu

Odczytywać preferencje użytkownika dotyczące trybu ciemnego systemu za pomocą prefers-color-scheme i aktualizować stan Reacta po ich zmianie

Wykrywanie schematu kolorów systemu to bezpłatna lekcja React Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.

Zapytanie medialne prefers-color-scheme

Zapytanie medialne CSS prefers-color-scheme wykrywa, czy użytkownik skonfigurował system operacyjny tak, aby używał ciemnego lub jasnego motywu kolorystycznego. Przyjmuje ono dwie wartości: dark i light. To ustawienie jest określane na poziomie systemu operacyjnego w ustawieniach systemowych, a nie w przeglądarce.

Tryb ciemny CSS za pomocą zapytania medialnego

Ciemne style można zastosować wyłącznie w CSS za pomocą @media (prefers-color-scheme: dark) { ... }. Wewnątrz tego bloku należy nadpisać kolory, tła i obramowania, dostosowując je do ciemnej palety. To podejście nie wymaga JavaScriptu i działa nawet przed zamontowaniem Reacta.

window.matchMedia w JavaScript

W JavaScript wywołanie window.matchMedia('(prefers-color-scheme: dark)') zwraca obiekt MediaQueryList. Można go użyć do programowego odczytania bieżącego ustawienia systemu wewnątrz hooków Reacta lub programów obsługi zdarzeń. Stanowi on połączenie między zapytaniami medialnymi CSS a logiką JavaScript.

Odczytywanie wartości początkowej

Obiekt MediaQueryList ma właściwość matches, która zwraca wartość logiczną. Jeśli matches ma wartość true, system działa w trybie ciemnym; jeśli ma wartość false, działa w trybie jasnym. Zwykle odczytuje się tę wartość raz podczas montowania komponentu, aby zainicjować stan motywu.

Nasłuchiwanie zmian systemowych

Użytkownicy mogą w dowolnym momencie zmienić schemat kolorów systemu operacyjnego. Aby dynamicznie reagować na takie zmiany, należy wywołać mediaQuery.addEventListener('change', handler), gdzie handler otrzymuje zaktualizowany obiekt MediaQueryListEvent. Obiekt zdarzenia również ma właściwość logiczną matches, która odzwierciedla nowe ustawienie.

Tworzenie hooka usePrefersDarkMode

Dobrym podejściem jest utworzenie własnego hooka za pomocą useSyncExternalStore. Hook subskrybuje mediaQuery.addEventListener i udostępnia funkcję migawki zwracającą mediaQuery.matches. Dzięki temu hook pozostaje zsynchronizowany z zewnętrznym API przeglądarki bez ręcznego zarządzania stanem.

Usuwanie subskrypcji podczas sprzątania

Po odmontowaniu komponentu należy usunąć odbiornik zdarzeń, aby uniknąć wycieków pamięci. W funkcji sprzątającej useEffect należy wywołać mediaQuery.removeEventListener('change', handler). W przypadku useSyncExternalStore funkcja subskrypcji musi zwracać funkcję usuwającą subskrypcję, która wykonuje tę samą operację.

Ustawienie systemowe a nadpisanie przez użytkownika

Ustawienie systemowe to wartość zgłaszana przez system operacyjny. Użytkownicy często chcą jednak niezależnie nadpisać motyw aplikacji, na przykład pozostawić aplikację w trybie jasnym, gdy system działa w trybie ciemnym. Architektura powinna rozróżniać domyślne ustawienie systemu od jawnego nadpisania przez użytkownika, przechowywanego w localStorage.

Emulowanie schematu kolorów w DevTools

Chrome DevTools umożliwia emulowanie ustawień schematu kolorów bez zmiany ustawień systemu operacyjnego. Należy otworzyć DevTools, przejść do karty Rendering i znaleźć listę rozwijaną „Emulate CSS media feature prefers-color-scheme”. Jest to niezwykle przydatne podczas szybkiego testowania obu motywów w trakcie developmentu.

Domyślne respektowanie preferencji użytkownika

Dobra implementacja trybu ciemnego odczytuje ustawienie systemowe jako domyślny punkt wyjścia i stosuje je natychmiast. W ten sposób respektuje ustawienie dostępności użytkownika. Dopiero po jawnym przełączeniu motywu w aplikacji należy zapisać i zastosować inne nadpisanie.

Uwzględnienie ustawień systemowych w SSR

Po stronie serwera window.matchMedia nie istnieje. W przypadku renderowania po stronie serwera przed wywołaniem matchMedia należy sprawdzić warunek typeof window !== 'undefined'. W aplikacjach SSR należy zamiast tego odczytywać preferencję użytkownika z pliku cookie lub nagłówka HTTP, aby uniknąć niezgodności podczas hydratacji.

Sprawdzenie API matchMedia

Jaka właściwość obiektu MediaQueryList informuje, czy zapytanie medialne obecnie pasuje?

Podsumowanie lekcji: wykrywanie schematu kolorów systemu

Zapytanie medialne prefers-color-scheme udostępnia preferencję kolorów systemu operacyjnego zarówno w CSS, jak i w JavaScript. Należy używać window.matchMedia do odczytywania zmian i nasłuchiwania na nie, zawsze usuwać odbiorniki zdarzeń oraz rozróżniać ustawienia domyślne systemu od nadpisań użytkownika. Emulowanie ustawień w Chrome DevTools przyspiesza testowanie obu motywów.

Często zadawane pytania

Czy lekcja „Wykrywanie schematu kolorów systemu” jest bezpłatna?

Tak — pełny tekst „Wykrywanie schematu kolorów systemu” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wykrywanie schematu kolorów systemu”?

Odczytywać preferencje użytkownika dotyczące trybu ciemnego systemu za pomocą prefers-color-scheme i aktualizować stan Reacta po ich zmianie Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć React Academy?

Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Wykrywanie schematu kolorów systemu”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?

Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Wykrywanie schematu kolorów systemu
  2. Zmienne CSS do przełączania motywów
  3. React Context do przechowywania stanu motywu
  4. Zapisywanie motywu i zapobieganie migotaniu
← Powrót do React Academy