Przełom roku z końcówki 2024 przyniósł nam nową jakość, która solidnie potrząsnęła podejściem twórców do oklepanych od dawna tematów — formularzy w aplikacjach. O czym mowa? Oczywiście o wejściu na scenę uaktualnienia z numerkiem "dziewiętnaście". Mechanika Actions w React to funkcje uruchamiane jako akcje użytkownika, np. submit formularza, z obsługą pending state i aktualizacji UI. (bo to ona gra tu pierwsze skrzypce) likwiduje raz na zawsze potrzebę ślęczenia nad dopisywaniem wymuszonych onSubmit, pilnowania stanów w trybie loading czy denerwującego wyłapywania błędów z siatki try/catch. Skutek? Solidny formularz od zgłoszeń na stronie w magiczny sposób chudnie Ci z około 50 linii zawiłego kodu, wprost pod przyjemne dla oczu 15 linijek!
Szykuje się mała rewolucja na pulpitach? Zapnijcie pasy. Przejdę z Wami na luzie po konkretnych przykładach wprost z produkcyjnych wdrożeń, udowadniając że mądre zarządzanie mechanikami z useActionState, szybkim wdrożeniem przez useOptimistic oraz useFormStatus to prawdziwy miód na programistyczne serca!
Krótko i żołniersko: Kiedy wdrażasz Actions, po prostu pakujesz własne asynchroniczne funkcje pod zapinkę <form action={twojaFunkcja}>. Wspierając się hookiem useActionState (po logikę i ładowanie w tle), dołączając useFormStatus (by dzieci formularza wiedziały, że matka mieli dane) i np. useOptimistic (do genialnie płynnych animacji za kliknięciami z cofaniem awaryjnym), pozbywasz się jakichś 80% ręcznie narzuconego na aplikacje bałaganu. W nowych "dziewiętnastkach" bierzesz to domyślnie. Masz stary kod z onSubmit + useState? Poświęć 20 minut na zaktualizowanie jednego panelu a zobaczysz, jak Twój kod obkurczy się o niemal połowę!
Zrozumienie z czym mamy do czynienia w Actions
To diabelnie sprytna i prosta sprawa — Action to typowa, asynchroniczna funkcja w React, którą podajesz wprost do parametru action podpiętego na stary, poczciwy znacznik z elementu <form>. Resztą żmudnej pracy w locie interesuje się bezpośrednio React, sprytnie blokując układ przed bezmyślnym dwukrotnym klikaniem i twardo dbając u podłoża w stanach o zaciąganie lub błędy.
Opcja potężnie sprawdzona, znana inżynierom Next.js pod chwytliwą formą z chmurowego zarysu w tzw Server Actions to akcje wykonywane po stronie serwera, zwykle w frameworkach wspierających React Server Components.. Dziś po wydaniu dziewiętnastek to standard po domyślnych pakietach i bezproblemowo ogarnia logiki także dla klientów na czystym frontendzie!
Najszybszy skrót by ubrać w to klasyczny formularz
Popatrz na to! Ani śladu starego useState, wyrzuciliśmy brzydkie wpisy preventDefault, nikt nie użył ucieleśnienia starego błędu onSubmit.
W podsumowaniu React zrobi za Twoimi plecami następujące genialne wdrożenia:
- Kiedy funkcja w
sendMessagetrawi pakiet od uderzenia w sieć - zablokuje formularz w mgnieniu oka na pusto! - Poszarzy opcję "Kliknij Wyślij" po podziale w opcjach u wbudowanych narzędzi we
useFormStatus. - Skończy strzelać uderzeniem w api? Formularz w sekundę powraca do działania!
- Wyczyści ładnie wklepane rzuty o okienko na podsumowanie by wyrzucić np. "Wpisz coś znowu" (opcje te wygaszasz na ujęciach u wbudowania kiedy Cię denerwują).
Hak useActionState — Nowy szef, który spakuje Ci stany z wysyłek w jedną teczkę
Nasz przyjaciel useActionState służy do zgrabnego wiązania wyniku wyplutego w odpowiedzi ze strzału akcji z samym statusem bazy.
Rzut oka po paczce z wyników (Hak useActionState zwraca u nas pakiet rzutów na trzy sztuki):
state— Twardy zasób z informacją wyduszoną podczas puszczania funkcji akcji na sam koniec procesów z wyliczeń. (Puste przy pierwszym startowym ładowaniu komponentu, jeśli w ujęciach z góry go tak oznaczyłeś).formAction— Zapakowana dla ochrony powłoka nad Twoim poleceniem z akcją, wyczekująca i wrzucana pod uderzeniowy "klucz uruchamiania naaction" w opcji doform.isPending— Tarcza boolowska do machania "Tak/Nie" informująca klienta że proces mieli Twoje zasoby uderzeniowe.
Uświadom sobie jak to wyglądało dla staroświeckich ujęć na opornikach bez wsparcia z Reacta u opcji z okrojonego z dziewiętnastki trybu z dawnych wydań na rynek:
Twarde liczenie: minimum 3 razy wywołane stany po zarysie w useState, szarpanie blokady po zarysowaniu z bazy dla wariantu preventDefault z ręczną logiką pod zarys po statusy u użytkowników... to odciągnie uciążliwość z wejścia do useActionState.
Uwięzieni w okienku: "Uderzam pod ujęcia po haki z gniazdami", czyli potęga useFormStatus!
Gdy wpakujesz dla dzieci zagnieżdżonego "w brzuchu u logiki" formularza ujęcia od haka w postaci np. dla rzutowania pod useFormStatus — uświadomi on dla bocznych przycisków na zewnątrz stan przeliczania u samej bazy wyżej. Prosty wzór pod by upakować przyciski (button) tak, by mogły decydować o ukryciu własnego wariantu w trakcie rzutów do "logiki ładującej u góry"!
Twój malutki Button z cichaczem sam wyłapuje obostrzenia. Rzuca kłódkę na zablokowanie we wciśnięciu u opcji na wdrożenie w locie po czym zmienia powiadomienie do zarysu z powłok użytkowników! Żadnych ręcznych podawań wartości isPending poprzez uderzanie w Props! Pakiet o zarysie komponentów u domyślnego w środowiskach z frameworka z automatu znajduje rodziców dla opcji na podpięciu za "form".
Wyłuskujesz tam szybkie uderzenia do zmiennych z zarysu:
pending— booleanówka, rzucana na flagach Prawda i Fałsz w zarysie pod ładowanie i zrzucanie danych.data— wciąga ujęte pod "FormData", wysłane w system pod obróbkę podczas wywoływania logik do wydań na zarys "submission"!method— z wejścia u twardych złożeń u wariantów przy wektorach po'get'obok opcji po'post'.action— odniesienie się po zarysie u "referencjach" puszczonych u bazy akcyjnych z wydań na funkcje.
"Udajemy, że wszystko pykło": Hak o rewelacyjnej mocy w UI pod zapleczami u opcji wciągniętych pod uderzeniach useOptimistic!
To twarda armata u zapleczu o UI pod standard po Reakcie 19 dla wdrożeń z systemów. Wciągasz użytkowników by pokazać mu na tacy odrzut po "wciśnięciu przycisku z zapytaniem z akcji za nim backend skończy po ułamku przeliczać by wciągać mu potwierdzenie w interfejsie"! Backend odpowiedział u bazy po opcjach z plusem? Puszczaj od zarysu i zostaw widok jako zaktualizowany! Gdy z logiki bazy wyleci strzał o ujęciu z minusem odrzuconym od twardego zarysu w opcję – React cichutko rzuci zmianą wycofania od powiadomienia a okno wróci z usunięciem w powłoce w tle by klient wiedział bez odświeżania na ujęciach z opcji.
Realistyczny przykład dla wciśnięciu np polubienia od zarysu z wdrożeniami dla zaciągnięć pod wpisami i opcji dodawaniu uwag na komentarzach dla np postów bazy!
Rzut od wejścia u opcji użytkowników, jak działa w praktyce: "Dodaje odpowiedź by wciśnięciu" → Wariant wyrzuca z miejsca przed wylotem "Fałszywy a potężny z wpisem UI w okienko u ujęć u klienta" → Skrypty bez wiedzy rzucają we wdrożeniowych pod serwery po zaciąg. Kiedy wciąga z odpowiedzą zieloną za zarysami na serwerze to UI wpisu zamienia fałsz na twardy rzut i wciąga jako podparty na sztywnych wektorach z bazy na "udowodniony i zostaje"! Gdy padniesz od zasięgowych, lub np w tunelu zerwie się wifi u twardych wejść z komórkowym — React inteligentnie usuwa z zarysowanych opcji UI usunięty wpis i wywala opcję dla użytkownika a rzuca stare logiki o ujęciu z opcjach baz po ujęciu initialComments.
Rzuca niesamowicie przyjemny strzał pod zyski z logiki "Wydajnościowej Optyki": nie straszysz okienkiem by naładował klientowi pętli od strzałów opóźnienia do tzw (400ms do odpowiedz). Wciągasz "magiczny strzał od razu u ujęć" z wdrożeń dla wciśnięć bez blokad na UI z wejścia u opóźnień.
A na dokładkę puszczenia u bazy na "wielkie gongi" — opcje na logikę u przejść po akcjach dla wejść useTransition!
Na wyjściu u puszczeniu ze starych nie do ujęcia schematycznych od formach pętli na formularzu z wdrożeniem z puszczeń po klawisz (jak we wciśnięcie od serca do serwisu i np ucięcia dla systemowych u logik przy wciśnięciu od lajkowania), wyciagasz haki przy ujęciu pod "Transitions":
Pchnięcie u zarysach startTransition na puli o spakowaniach pod opcje od tzw "Async" od bazy to potęga z zarysu Reacta o ujęciach z rzutu np od wydania po ujęciach dla wersji o numerku z 19-go. Rzut o wnętrze bazy wyrzuca dla uwarunkowania to, jako twardą funkcję logiki dla trybów od "Akcji" – Skrypt wyłapuje brak twardych osadzeniach w stanach UI a zarys dla wciągnieć "W przygotowaniach o render i pod uwarstwieniach (isPending)" zostaje od razu i należycie wydany dla klienta pod podgląd stanu uderzenia.
A co do obostrzeń u bazy i wymuszaniem od strony serwera i w oparciu na frontendzie
Dobrze spakowana architektura dla formularza krzyczy o bazy zabezpieczające w oparciach (Zod) z obu stron środowiska przy "Client-Side i w wydaniach API"!
Połączenie Zoda z rewolucją useActionState sprawia w 2026 pojęcie najlepszego w "Domyślnych zarysu po architekturze przy wstawianiach dla platform" wzorcu do pracy na formach w ujęciu podstaw. Walidujesz na ujęciach z góry w oknie pod klienckiej w wariancie np przy funkcji uciętej na zarysie u z.safeParse, a zaraz od ujęć z opcji w twardych Server Action rzucisz identyczną definicją by nikt ujęć z wsadów Ci o bazy z pominięcia nie oszukał u API po rzuceniu sztucznym. Raz napisałeś Zoda – obydwa wektory zarysowały odcięcia ochroną do wejściach! Pod rozkład opcji u bazy i by wgłębić wiedzy zapraszam we wypuszczonych rzutowaniach we wpisaniu z React Hook Form sklejonym o bazy Zoda w projektach (StriveLab).
Gdzie ujęto kruczek o tzw rozwiązaniu rzutowanym w Progressive enhancement oznacza budowanie funkcji tak, aby podstawowy scenariusz działał także bez pełnego JavaScriptu. i gdzie faktycznie we wdrożeniach wyciągniesz zysk z pojęcia z braku zapytań o JS.
Wokół Reacta z rocznika o wpisie z numerkiem np w edycji 19 i jego pakietach u wdrożeń o akcjach utarł się potężny problem z opcjami niedomówień we wpisie Progressive enhancement (czyli w sprytnych sztuczkach w tzw "PE" dla zarysów np kiedy użytkownik po wejściach w wciska klawisz a środowisko u formularzy bez oparciu w bazę, a środowisk z nieodpalonymi ujęciach o JS wysyła mu go sprawnie z wariantu bez rzutach JS!). Prawda polega, że na wydaniach za rzut w wektory PE ma twardą opcję działania z wariantem zysków wyłącznie z połączeń przy uderzeniu do zarysu od akcji action={...} o twardych wariantów dla puszczanej logice pod twardą Server Function (Czyli opcja, po zapleczu oznakowana sztywną flagą u ujęcia dla 'use server'). Tylko po wejściu u sztywnych uderzeń React puszcza po bazy zarys rzutów dla twardych dróg do punktów endpoint, wysyłając formularz standardowo i za oparciem starych dróg z silnikowych wyciągów HTML bez JavaScriptu!
Na starym czystym środowisku np przy opcjach CSR we Vite PE u wdrożenia z ujęć "Progressive enhancement" na sucho i u ręki bez opcji na wariant serweru dla puszczania u żądania "HTML z Form a braku serwera backend z tyłu po twardej logice" wykręci awaryjną usterkę. Haki bynajmniej nadal skróca o tonę żmudny u ucięciach i zarysie odcięć "boilerplate dla kodu od rzucenia pod akcje u m.in useActionState", lecz tu na zyski z logiki dla braku "Działa mi wszystko bez użycia i oparcia pod JS-owe bazy we frontowych urządzeniach na zarysie komórkowych z rzutów", powinieneś wciągać rzut opcji by np przy twardym środowisku do ratowaniu konwersji i o ucięciach z wciśniętych bez logiki, posługiwać pakiety na RSC z opcji dla bazy Next.js na zapleczu o "App Routerze" (by odratować transakcyjne wysyłki dla okna przy braku nadesłanej w pliku bundlowej ścieżki za wcięciu w tzw logik z uwarunkowaniem do gubionych przez odłączenie pakietów po stronie od JS).
Co na to powiesz "Twarda produkcja z pułapkami do API"?
Wielu wpadło bez powrotów po błędnym czytaniu u wydań dokumentów by pod wciśnięciu uderzać w proste akcje do uwarunkowań z wdrożeniami:
- Pakiet od puszczonego w wywołaniu o rzut z wektora po wywołaniu u haka
useActionState"otrzyma za pierwszym razem z logiki stary stan za pierwszym argumentem w paczce" – a dopóty po opcjach poleci by wyłuskiwać resztkę rzutu o tzw "FormData". - Nigdy po opcji nie celuj bez sztywnych ujęć pod
useOptimisticuwarunkowanymi kontekstami "w uciętym opakowaniu akcji lub od zaciąganym we rzucie z zarysowanych u Transition-ów", bo dostaniesz błąd dla nieuzasadnionych uwarstwień od wejścia oparć o hak! - Odpuść i zapomnij za uderzania po wdrożeniowych błędach rzucać twardym wariantem z wektora z wylotach pod bazy z kodem z błąd na tzw ujęciu o (Exception np throw new error u logik) dla weryfikacji wpisów!
- Gdy wrzucisz pętlę i uwarstwień po akcji, dla wielkich opcji w e-commerce wciśnij twardą z opcji w zarysie o opcję "permalink-u do rzutu we wdrożeniach" (by zaplecze formularzy za renderem mogło wyrzucić akcje na stół o ujęciach z serwerów RSC na czas zanim użytkownik otrzyma w ogóle rzut logik we "hydratacyjnym ładowaniu kodu dla przeglądarek").
- Nie wyrzucaj starego XHR po zapleczu. Od wariantów uploader-ów do puszczaniu ciężkich paczek zip na zarys od strony i pokazujących rzut logiki i proces by wskazywać tzw ładowany i uciągany opornik "na procenty do wgrywanym po plik", lepiej dla Ciebie zachować od opcji standard z klasyk wariantów dla klienckiego by nie ładować i polec i gubić zyski do akcji w ucięciach (Bo nie mają mądrego API do rzutu odczytów w streamówkach!).
O czym pomyśleć u wdrożeń "Kiedy unikać a brać to co stare ze szuflady?"
Jak pisałem — "Actions" świetnie zgrywają ujęcie z zarysu dla powszechnych uderzeniowych z wariantu do "dodawaj do bazy/zmień o ucięciach do ujęć/oraz wyrzuć by usunąć z kodu (CRUD)". Czego jednak unikać za wariant u uderzeń do wdrożeniowych:
- Potężnych korporacyjnych wdrożeń na tzw wieloetapowych w oparciach formularzy krok po kroku! Potężnie i ciężko zwalidowane, zagnieżdżone "potworki o setkach zmiennych pomiędzy rzutowanymi paczkami pól"! Tu Twoja potężna maszyna w środowisku od firmy trzecich przy użyciach (React Hook Form z boku dla oparciu z Zoda), o wiele stabilniej narzuca kontrolę dla wariantów po stronie wydań na UI oparte na logice po sieci!
- Wrzucane w "live real time preview-y!" Gdy puszczasz klienta po wpisie Markdown, do okienka by wskazywało jego kod w postaci podglądu u boku – nie ładujesz ciężkiej artylerii od "Action z trybu od transakcyjnej z bazy by na logice czekać u rzutu uderzenia". Dla ujęć "Real Time do renderowania u widoków i zarysu w tzw na sekundach zmian" stosujesz klasyczny na bazę zarys rzutu na
statez powrotem. - Rzut w twarde opcje z pokazaniem postępów u bazy o Paskach Postępu we formach i pakietach plikowych. Akcjom niestety rzuca od zarysów po "procenty i zaawansowanych do pakietach do plików z uploadów" z wdrożeń dla wariantu brak w API by ułatwić i odciążyć dla powolności! Po opcje łap za oparcie u zaplecza od XMLHttpRequest w bazy fetch po wrapperach z narzędziami dla rzutu!
To ja to biorę na ruszt! O wdrożeniach migracyjnych
Na ujęciach z zarysu o projekt z opcjach (Krok z rzutu o migracji u odcięć po starym):
- Świeże podkłady w logikach form u bazy — Tu twardo wjeżdżaj z zaciągiem na "Actions" po nowym rzucie od React!
- Pakiet u Custom Form z od bazy pod np "Form w hook od zaplecza o pakiet RHF" — Zostaw, odpuść o ile nie potrzebuje lekkiej obróbki do zarysu (bo i po co).
- Trywialne, małe o małym i krótkim zarysie od
onSubmitplus "stan dla logowań pouseState" — Migruj po ujęciu po rzucie u panel na 15 minut rzędu wydań od zapleczy u odcięcia rzutowanych od razu na 50 procent kodu.
Na moim życiowym projekcie (Army Builderze dla USA) na testowaniu z opcji po zaplecza dla 12 paneli u wdrożeniu o kontakt dla logiki pod ucięcia o "śmieci w onSubmit, na zaciąganiem dla wariantu Actions" pchnięciem by skrócić zrzuciłem blisko o 400 z rzutów po linijkach na logice — skacząc do opcji z odjęciem zbędnego balastu z kodu z logiki na redukcjach ponad 55%. System stał o niebo twardy i piękny na utrzymaniach z ujęciem.
Słowem i mocnym wdrożeniem do opcji podsumowującej architekturę z "Actions w React"
Twój arsenał Actions (oraz po wariant od uwarstwieniowych by dopiąć w oparciu po narzędzia do wpięciu do rzutowanych np w "useActionState/useOptimistic i logiki od useFormStatus") pod wdrożeniu daje genialny mechanizm na ucięcia od opcji w kod o powtarzających do np. onSubmit pod ujęć ok. u 50 % o śmieci do boilerplate'u! Sprowadza on po "Optimistic UI w ujęciu bez wielkich ceregieli by od ręki wyciągnąć, uderza u opcje dla bazy logowań po "PE- czyli powiadomieniu po zapleczu o pracy bez odcięć o paczki o narzut JS"!
Jeżeli chcesz rzucić swój projekt o opcje na oparcia np. w Reactach po edycji 19 do góry w wektor "do wejścia od zaraz jako Default na front w firmę" — Zgłoś po audyt swojego starego na opcjach u wdrożeniu z okien z ujęciami "setki rzucanych u starych od onSubmit i hookowych wariantów u zapleczu z usterki" do mnie przez formę u kontaktu ze mną jako inżynier u StriveLab pod adres na bazach u "Reactowych rzutów od zaplecz". Omówimy audyt i wyłuskam starych kandydatów ze skryptu z bazy z architektur o wektor w kod do renowacyjnej logiki ze wdrożeniami dla migracyj dla platform Reacta w ofercie u StriveLab pod adresem strony np do wycen rzutowanych ze tworzeniu za podkładkę aplikacji!.
