Hooki React używane na co dzień, pogrupowane według zadania: przechowywanie stanu, uruchamianie efektów, memoizacja pracy, współdzielenie kontekstu i wyjście poza render. Każdy wiersz łączy hook z tym, do czego służy.
Hook to funkcja, która pozwala komponentowi funkcyjnemu korzystać z możliwości Reacta: stanu, cyklu życia, kontekstu i strojenia wydajności. Dwie zasady: wywołuj hooki na najwyższym poziomie (nigdy w pętlach ani warunkach) i wywołuj je tylko z funkcji Reacta. Reszta to wybór właściwego hooka do zadania.
Tabela referencyjna · 24 wpisy
Hooki ReactExplained
24 of 24 rows
Stan
Przechowuje pojedynczą wartość, której zmiana wywołuje ponowny render.
Lokalny stan komponentu: pola formularza, przełączniki, liczniki.
Przechowuje stan sterowany reduktorem akcji, jak mały store.
Stan z kilkoma powiązanymi polami lub ze złożonymi przejściami.
Przechowuje mutowalną wartość, która NIE wywołuje ponownego renderu.
Mutowalne kontenery, timery i bezpośredni dostęp do DOM przez .current.
Efekty
Uruchamia efekt uboczny po renderze, z opcjonalnym sprzątaniem.
Pobieranie danych, subskrypcje i synchronizacja z systemem zewnętrznym.
Funkcja zwrócona przez efekt uruchamia się przed następnym efektem i ponownie przy odmontowaniu.
Zrywanie subskrypcji i timerów albo przerywanie trwającego fetcha.
Jak useEffect, ale odpala się synchronicznie po mutacji DOM.
Czytanie lub pisanie layoutu, zanim przeglądarka odmaluje (toasty, tooltipsy).
Handlery zdarzeń uruchamiają się w odpowiedzi na akcję użytkownika; efekty — po renderze, żeby zsynchronizować.
Logika wywołana przez użytkownika należy do handlera, logika wywołana renderem — do efektu.
W trybie deweloperskim montuje komponenty dwukrotnie, żeby efekty się uruchomiły, posprzątały i uruchomiły ponownie.
Wyłapywanie podwójnych subskrypcji i brakującego sprzątania przed produkcją.
Wydajność
Buforuje obliczoną wartość do zmiany zależności.
Unikanie kosztownych przeliczeń między renderami; zmień celowo wartość w zależnościach, aby unieważnić cache.
Buforuje referencję funkcji do zmiany zależności.
Stabilne callbacki przekazywane do memoizowanych dzieci lub używane jako zależności.
Pomija ponowny render komponentu, którego propsy się nie zmieniły.
Ciężkie komponenty dzieci; przekaż funkcję porównującą jako drugi argument, gdy płytka równość nie wystarcza (HOC, nie hook).
Kontekst i uchwyty zewnętrzne
Czyta wartość kontekstu bez prop drillingu.
Motyw, locale lub zalogowany użytkownik współdzielone w drzewie.
Dostosowuje instancję, którą rodzic widzi przez ref.
Udostępnienie wąskiego API z dziecka przez forwardRef.
Współbieżność i inne
Oznacza aktualizację stanu jako niepilną, żeby interfejs pozostał responsywny.
Sprawne wpisywanie podczas ponownego renderu ciężkiej listy.
Odracza wartość, żeby aktualizacje dało się przerwać.
Debouncing kosztownych renderów bez timerów.
Generuje stabilny, unikalny id dla atrybutów dostępności.
Łączenie label i input między renderem serwera a klienta.
Czyta promise lub kontekst podczas renderu; jedyny hook, który można wywołać warunkowo.
Rozpakowanie promise'a z Suspense albo czytanie kontekstu we wczesnym returnie.
Przechowuje stan sterowany akcją formularza, z dołączoną flagą pending.
Wysłania formularzy, które zwracają błędy lub zaktualizowany stan do pokazania inline.
Renderuje od razu wartość optymistyczną, a gdy akcja się zakończy, wraca do prawdziwego stanu.
Pokazanie lajka lub wysłanej wiadomości, gdy żądanie do serwera jest w toku.
Czyta stan pending otaczającego <form>, bez propsów.
Przycisk wysyłania, który wyłącza się, gdy nadrzędny formularz się wysyła.
Subskrybuje store spoza Reacta i czyta jeden spójny snapshot.
API przeglądarki jak status online albo zewnętrzne store'y stanu.
Uruchamia się przed efektami layoutu, stworzony do wstrzykiwania reguł CSS-in-JS.
Biblioteki stylów, które muszą wstawić reguły przed odczytem layoutu.
Pokazuje własną etykietę wewnętrznego stanu hooka w React DevTools.
Etykietowanie tego, co trzyma własny hook, podczas debugowania.
Twój własny hook, który łączy wbudowane hooki, by współdzielić logikę.
Wielokrotnego użytku logika ze stanem, jak useFetch czy useMediaQuery.