React Academy · Lekcja

Animacje wejścia i wyjścia bez biblioteki

Proszę zaimplementować animacje montowania i odmontowywania, ręcznie sterując czasem wyświetlania i przezroczystości w React.

Lekcja 4 z 413 kroki

Animacje wejścia i wyjścia bez biblioteki to bezpłatna lekcja React Academy na CoddyKit. To lekcja 4 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.

Problem odmontowywania

Podczas warunkowego renderowania za pomocą {show && } React usuwa element z DOM-u natychmiast po tym, jak wartość show zmieni się na false. Nie ma czasu na animację wyjścia, ponieważ węzeł już nie istnieje.

Animacje wejścia są łatwe; prawdziwym wyzwaniem są animacje wyjścia.

Rozwiązanie 1: pozostawienie elementu zamontowanego

Najprostsze rozwiązanie polega na tym, aby nigdy nie odmontowywać elementu. Należy pozostawić go w renderowanym widoku i podczas ukrywania animować opacity do zera oraz ustawić pointer-events: none, a podczas pokazywania przywrócić wartość jeden.

Zapewnia to płynne zanikanie w obu kierunkach kosztem pozostawienia elementu w DOM-ie.

Rozwiązanie 2: maszyna stanów montowania

Aby faktycznie odmontowywać element, można zamodelować małą maszynę stanów z fazami takimi jak mounting, mounted, unmounting i unmounted. Węzeł usuwa się dopiero po zakończeniu animacji wyjścia.

Stan określa, które klasy animacji są stosowane w każdej fazie.

Hook useMount

Maszynę stanów można zamknąć w niestandardowym hooku, często nazywanym useMount. Przyjmuje on oczekiwaną widoczność i zwraca informację, czy element powinien znajdować się w DOM-ie, oraz jego bieżącą fazę.

Komponenty pozostają przejrzyste, ponieważ logika odmierzania czasu znajduje się w wielokrotnie używanym hooku.

Pary klas wejścia i wyjścia

Zgodnie z popularnymi konwencjami podczas montowania stosuje się najpierw enter, a następnie enter-active, natomiast przy usuwaniu — exit, a potem exit-active. Klasa bazowa określa stan początkowy, a klasa aktywna — stan końcowy wraz z przejściem.

Przełączanie między nimi w odpowiedniej klatce uruchamia animację.

Nasłuchiwanie zdarzenia transitionend

Aby wiedzieć, kiedy kończy się animacja wyjścia, należy nasłuchiwać zdarzenia transitionend na elemencie. Gdy zdarzenie dotyczące wyjścia wystąpi, zmienia się stan na unmounted i usuwa węzeł.

Dzięki temu odmontowanie jest dokładnie powiązane z końcem animacji wizualnej, zamiast opierać się na przybliżonym czasie.

Wielokrotnie używany komponent Transition

Całą tę logikę można zamknąć w komponencie Transition, który przyjmuje właściwość in oraz elementy podrzędne. Utrzymuje on elementy podrzędne zamontowane przez cały czas trwania animacji wyjścia i stosuje odpowiednie klasy dla każdej fazy.

Wystarczy, że użytkownicy komponentu przełączają in, aby automatycznie uzyskać poprawne animacje wejścia i wyjścia.

Prawidłowe uruchamianie klasy aktywnej

Istnieje tu istotny szczegół: przed dodaniem klasy aktywnej należy pozwolić przeglądarce wyrenderować klasę początkową, w przeciwnym razie element przeskoczy bez przejścia. Wywołanie requestAnimationFrame lub wymuszone przeliczenie układu między tymi operacjami gwarantuje, że przejście rzeczywiście się wykona.

Dzięki temu przeglądarka najpierw zarejestruje wartości początkowe.

Porównanie z react-transition-group

Biblioteka react-transition-group udostępnia komponenty Transition i CSSTransition, które implementują dokładnie ten wzorzec, w tym cykl życia klas i moment odmontowania.

Własna implementacja odzwierciedla jej podstawowe założenia, dzięki czemu po samodzielnym zbudowaniu takiego rozwiązania łatwo zrozumieć działanie biblioteki.

Kiedy użyć biblioteki, a kiedy własnego rozwiązania

W przypadku pojedynczego prostego zanikania wystarczy pozostawienie elementu zamontowanego lub niewielki hook, co pozwala uniknąć dodatkowej zależności. Przy wielu skoordynowanych przejściach, listach z dodawaniem i usuwaniem elementów lub złożonym sekwencjonowaniu biblioteka oszczędza czas i pomaga uniknąć błędów brzegowych.

Wybór należy uzależnić od rzeczywistego poziomu złożoności animacji potrzebnego w aplikacji.

Zebranie całości

Animacje wyjścia wymagają utrzymania elementu do czasu zakończenia animacji — czy to przez nieodmontowywanie go, maszynę stanów z transitionend, czy bibliotekę.

Zrozumienie mechanizmu pozwala wybrać najprostsze rozwiązanie spełniające wymagania.

Szybki test

Sprawdź swoją wiedzę na temat animacji wyjścia.

Podsumowanie

Dowiedział się Pan, dlaczego animacje wyjścia są trudne, poznał Pan dwa rozwiązania — pozostawienie elementu zamontowanego i maszynę stanów montowania — a także sposób, w jaki transitionend określa moment odmontowania, oraz jak zbudować wielokrotnie używany komponent Transition.

Poznał Pan również sytuacje, w których warto użyć react-transition-group zamiast własnego rozwiązania.

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 „Animacje wejścia i wyjścia bez biblioteki” jest bezpłatna?

Tak — pełny tekst „Animacje wejścia i wyjścia bez biblioteki” 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 „Animacje wejścia i wyjścia bez biblioteki”?

Proszę zaimplementować animacje montowania i odmontowywania, ręcznie sterując czasem wyświetlania i przezroczystości w React. Ć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 4 z 4.

Ile czasu zajmuje lekcja „Animacje wejścia i wyjścia bez biblioteki”?

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