React Academy · Lekcja

Przejścia CSS przy zmianach stanu React

Proszę uruchamiać przejścia CSS przez przełączanie nazw klas za pomocą stanu React — przejścia opacity, transform i color.

Lekcja 1 z 413 kroki

Przejścia CSS przy zmianach stanu React 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.

Czym jest przejście CSS

CSS-owe transition płynnie interpoluje właściwość między dwiema wartościami w czasie, zamiast zmieniać ją natychmiast. Deklaruje się je na elemencie za pomocą transition: property duration timing-function delay.

W React zazwyczaj nie animuje się ręcznie wartości inline. Zamiast tego za pomocą stanu przełącza się klasę lub styl, a CSS obsługuje klatki pośrednie.

Uruchamianie przejścia przez przełączanie klasy

Typowy wzorzec polega na przechowywaniu wartości logicznej w useState i zamianie klasy CSS po jej zmianie. Gdy klasa się zmienia, docelowa właściwość otrzymuje nową wartość, a CSS animuje różnicę.

Na przykład isOpen określa, czy element ma klasę open, a klasa open ustawia inną wysokość lub transformację.

Stan logiczny isVisible

Typowa konfiguracja to const [isVisible, setIsVisible] = useState(false). Przycisk wywołuje setIsVisible(v => !v), aby przełączyć wartość.

Użycie aktualizatora funkcyjnego v => !v zapobiega odczytaniu nieaktualnego stanu, gdy kilka aktualizacji zostanie dodanych do kolejki, dzięki czemu przełączanie działa niezawodnie.

Warunkowa klasa z użyciem literałów szablonowych

Klasę className buduje się dynamicznie: className={'panel ' + (isVisible ? 'panel--shown' : 'panel--hidden')}. Klasa bazowa zawiera deklarację przejścia, a klasy modyfikatorów przechowują wartości początkowe i końcowe.

Umieszczenie transition w zawsze obecnej klasie bazowej sprawia, że animacja działa w obu kierunkach — podczas otwierania i zamykania.

Jednoczesne animowanie transform i opacity

Można animować kilka właściwości naraz, wymieniając je po przecinku: transition: transform 300ms ease, opacity 300ms ease. Efekt płynnego pojawiania się i przesuwania łączy zmianę opacity z użyciem translateY we właściwości transform.

Jednoczesne animowanie obu właściwości zapewnia dopracowane pojawianie się elementu, który przesuwa się w górę i równocześnie staje się widoczny.

Efekt kaskadowy z transition-delay

transition-delay opóźnia rozpoczęcie przejścia. Nadanie elementom listy coraz większych opóźnień tworzy kaskadę, w której każdy element animuje się chwilę po poprzednim.

W React opóźnienie można obliczyć inline, na przykład style={{ transitionDelay: index * 50 + 'ms' }}.

Dlaczego display nie może być animowane

Właściwość display nie jest animowalna, ponieważ między wartościami none i block nie ma wartości pośrednich. Przejście tej właściwości powoduje natychmiastową zmianę, a nie płynne pojawianie się.

Zamiast tego należy animować opacity, aby uzyskać efekt wizualnego zanikania, oraz przełączać pointer-events: none, aby ukryty element ignorował kliknięcia, gdy jest niewidoczny.

Funkcje czasowe

Funkcja czasowa określa, jak zmienia się prędkość w czasie trwania animacji. linear porusza się ze stałą prędkością, ease rozpoczyna się i kończy powoli, a cubic-bezier(...) pozwala zdefiniować całkowicie niestandardową krzywą.

Niestandardowe krzywe świetnie nadają się do uzyskania efektu dynamicznego lub sprężystego, na przykład cubic-bezier(0.34, 1.56, 0.64, 1) zapewnia niewielkie przekroczenie wartości docelowej.

Zmienne CSS do określania czasu trwania

Czasy trwania można przechowywać we własnych właściwościach CSS, takich jak --speed: 300ms, i używać ich ponownie: transition: opacity var(--speed) ease. Dzięki temu czas trwania pozostaje spójny we wszystkich komponentach.

React może nawet ustawiać tę zmienną inline za pomocą style={{ '--speed': '500ms' }}, pozwalając właściwościom komponentu sterować czasem trwania animacji.

Preferowanie transform i opacity ze względu na wydajność

Przeglądarki mogą animować transform i opacity w kompozytorze GPU bez ponownego obliczania układu ani ponownego malowania. Animowanie właściwości takich jak width, top czy margin wymusza obliczenia układu przy każdej klatce i może powodować zacinanie.

Gdy trzeba przesunąć, przeskalować lub obrócić element, należy użyć transform; gdy trzeba uzyskać efekt zanikania, należy użyć opacity.

Złożenie wszystkiego w całość

Niezawodne przejście w React łączy stan logiczny, warunkową klasę modyfikatora oraz klasę bazową, która deklaruje transition dla właściwości przyjaznych dla GPU. Stan przełącza klasę, a CSS zajmuje się animacją.

Dzięki temu komponenty zachowują deklaratywny charakter, a przeglądarka może tworzyć płynny ruch.

Szybki test

Sprawdź swoją wiedzę na temat wydajnych animacji.

Podsumowanie

Nauczono się uruchamiać przejścia CSS przez przełączanie klas sterowanych stanem, animować jednocześnie transform i opacity, tworzyć efekt kaskadowy za pomocą opóźnień oraz unikać animowania display przez użycie opacity wraz z pointer-events.

Omówiono także funkcje czasowe, czasy trwania przechowywane w zmiennych CSS oraz to, dlaczego właściwości kompozytowane przez GPU zapewniają płynny ruch.

Bezpłatny start

Ucz się React dzięki korepetycjom AI — za darmo

Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.

Kursy
88
Lekcje
324

Często zadawane pytania

Czy lekcja „Przejścia CSS przy zmianach stanu React” jest bezpłatna?

Tak — pełny tekst „Przejścia CSS przy zmianach stanu React” 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 „Przejścia CSS przy zmianach stanu React”?

Proszę uruchamiać przejścia CSS przez przełączanie nazw klas za pomocą stanu React — przejścia opacity, transform i color. Ć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 „Przejścia CSS przy zmianach stanu React”?

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. Przejścia CSS przy zmianach stanu React
  2. Animacje CSS z użyciem keyframes w React
  3. useLayoutEffect do pomiarów przed animacją
  4. Animacje wejścia i wyjścia bez biblioteki
← Powrót do React Academy