Submitting a form has always involved the same tedious chores: track a pending flag, catch errors, disable the button, reset on success. React 19 introduces Actions to handle this pattern natively. An Action is an async function you connect to a form (or call in a transition), and React manages the pending state, errors, and sequencing for you, removing a whole category of boilerplate.
The centrepiece is useActionState, a hook that wires an async action to a piece of state and exposes whether it is pending. You pass it an action function and an initial state; it returns the current state, a wrapped action to attach to a form, and a pending boolean. React runs the action on submit, tracks its progress, and stores its result as the new state.
Alongside it, useFormStatus lets a nested component (like a submit button) read its parent form's pending status without prop drilling. Together these turn manual form-handling code into a declarative flow. This lesson covers Actions, useActionState, and useFormStatus, and how they make form submission and other async mutations dramatically cleaner.