Capítulo 97 de 116
<form>React's <form> extends the native element with an action prop that accepts a function (a client function or a Server Function) — submitting the form calls that function with the form's FormData, integrating directly with useActionState/useTransition's Actions model instead of requiring manual onSubmit + preventDefault wiring.
action={function}: pass a function instead of a URL string, and React calls it with the submitted FormData when the form submits, automatically wrapping it as a transition (Ch 65) — the form's pending state, error handling, and result naturally integrate with useActionState (Ch 48).action is a Server Function (Ch 111) and JavaScript hasn't loaded yet, the browser performs a real HTML form submission to the server instead — the same action works both with and without client JS, degrading gracefully.action, React resets the form fields automatically once the action completes successfully — no manual form.reset() call needed in the common case.onSubmit + event.preventDefault() pattern (Ch 20) for forms that don't use the Actions model — the function-action approach is additive, not a replacement requirement.<form action={async (formData) => {
await submitOrder(formData.get('email'));
}}>
<input name="email" />
<button type="submit">Order</button>
</form>
action, receiving FormData without any manual onSubmit/preventDefault wiring.action is the modern, Actions-integrated way to handle form submission — it composes directly with useActionState/useOptimistic/useTransition.action gets real progressive enhancement for free — submission still works before the JS bundle finishes loading.onSubmit/preventDefault pattern remains valid for forms that don't need the Actions integration.action for reducer-style submission state.<input>): the controlled/uncontrolled distinction that determines whether automatic reset applies.