useActionState i useFormStatus
Użyją Państwo useActionState do śledzenia stanu oczekiwania i błędów oraz useFormStatus do wyłączania przycisków przesyłania podczas wykonywania akcji.
useActionState i useFormStatus to bezpłatna lekcja React Academy na CoddyKit. To lekcja 3 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.
Wprowadzenie do useActionState
useActionState(action, initialState) to hook React 19, który opakowuje Server Action, aby śledzić jej stan pomiędzy kolejnymi przesłaniami. Przyjmuje funkcję akcji i wartość stanu początkowego, a następnie zwraca krotkę, za pomocą której można sterować całym działaniem formularza.
Zwracana krotka
Hook zwraca [state, formAction, isPending]. state przechowuje ostatnią wartość zwróconą przez akcję, początkowo równą null lub podanej wartości początkowej. formAction to opakowana akcja, którą należy przekazać do formularza. isPending ma wartość true, gdy akcja jest wykonywana na serwerze.
Śledzenie stanu między przesłaniami
Przy każdym przesłaniu formularza Server Action jest uruchamiana, a jej wartość zwracana staje się nowym state. Przy pierwszym renderowaniu state jest równe initialState. Ułatwia to wyświetlanie różnego interfejsu w zależności od tego, czy formularz był już wcześniej przesyłany, i jakie były wyniki tych przesłań.
Wyświetlanie wbudowanych błędów walidacji
Jeśli Server Action zwróci { errors: { email: 'Invalid email' } }, błąd można wyświetlić bezpośrednio przy polu: {state.errors?.email && <p>{state.errors.email}</p>}. Ponieważ stan zachowuje się pomiędzy ponownymi renderowaniami, komunikat o błędzie pozostaje widoczny do czasu, aż kolejne pomyślne przesłanie zastąpi ten stan.
Wyświetlanie komunikatów o sukcesie
Gdy akcja zwróci { success: true }, komponent może wyświetlić komunikat o sukcesie: {state?.success && <p>Form submitted!</p>}. Na podstawie wartości stanu formularz można warunkowo ukryć lub zastąpić komunikatem o sukcesie.
Wprowadzenie do useFormStatus
useFormStatus() to hook odczytujący stan oczekiwania najbliższego nadrzędnego elementu <form>. Zwraca obiekt zawierający między innymi { pending: boolean }. Tego hooka należy używać wewnątrz komponentu będącego dzieckiem formularza — nie w komponencie, który sam renderuje formularz.
Dlaczego istnieje ograniczenie dotyczące położenia
Ograniczenie, zgodnie z którym useFormStatus musi być używany wewnątrz formularza, wynika z tego, że hook odczytuje kontekst formularza z nadrzędnej części drzewa Reacta. Gdyby wywołać go w tym samym komponencie, który renderuje formularz, byłby elementem równorzędnym formularza, a nie jego potomkiem, i nie miałby dostępu do jego stanu.
Tworzenie komponentu przycisku wysyłania
Standardowy wzorzec polega na wydzieleniu przycisku wysyłania do osobnego komponentu: function SubmitButton() { const { pending } = useFormStatus(); return <button disabled={pending}>Submit</button>; }. Następnie ten komponent umieszcza się wewnątrz formularza, dzięki czemu ma dostęp do jego stanu oczekiwania.
Wyłączanie przycisku wysyłania
Ustawienie disabled={pending} na przycisku wysyłania zapobiega wielokrotnemu przesłaniu formularza. Gdy użytkownik kliknie przycisk wysyłania i Server Action będzie wykonywana, pending ma wartość true, więc przycisk zostaje wyłączony i nie można go kliknąć. Po zakończeniu akcji pending ponownie ma wartość false, a przycisk zostaje włączony.
Łączenie obu hooków
Kompletny wzorzec obsługi formularza łączy oba hooki: useActionState w komponencie formularza śledzi wynik akcji i udostępnia formAction, natomiast useFormStatus wewnątrz podrzędnego komponentu SubmitButton śledzi stan oczekiwania. Razem zapewniają wyświetlanie błędów walidacji i szybko reagujący przycisk wysyłania.
Optymistyczny interfejs z useOptimistic
Aby interfejs reagował jeszcze szybciej, można połączyć useOptimistic z useActionState. Interfejs jest natychmiast aktualizowany oczekiwanym wynikiem, zanim serwer odpowie, a następnie synchronizowany po nadejściu rzeczywistej odpowiedzi. Ten wzorzec jest często stosowany w przypadku przycisków polubienia, list zadań i innych interakcji wymagających szybkiej informacji zwrotnej.
Położenie useFormStatus
Gdzie należy wywołać useFormStatus, aby działał poprawnie?
Podsumowanie lekcji
useActionState(action, initialState) zwraca [state, formAction, isPending] do śledzenia wyników Server Action. Stan przechowuje wartość zwróconą przez akcję, umożliwiając wyświetlanie błędów i komunikatów o sukcesie bezpośrednio w interfejsie. useFormStatus() udostępnia { pending } wewnątrz komponentów będących dziećmi formularza, umożliwiając tworzenie szybko reagujących przycisków wysyłania. Oba hooki razem tworzą kompletny i dostępny formularz.
Często zadawane pytania
Czy lekcja „useActionState i useFormStatus” jest bezpłatna?
Tak — pełny tekst „useActionState i useFormStatus” 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 „useActionState i useFormStatus”?
Użyją Państwo useActionState do śledzenia stanu oczekiwania i błędów oraz useFormStatus do wyłączania przycisków przesyłania podczas wykonywania akcji. Ć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 3 z 4.
Ile czasu zajmuje lekcja „useActionState i useFormStatus”?
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
- Server Actions w React 19 i Next.js
- Form Actions: zastępowanie tras API dla mutacji
- useActionState i useFormStatus
- Progresywne ulepszanie za pomocą Server Actions