Skip to main content

Form Handling

React Router’s Form component enhances HTML forms with client-side navigation, optimistic UI, and automatic revalidation. It’s the primary way to handle user input and mutations.

Basic Form

The <Form> component works like a regular HTML form but prevents full page reloads:

Form Methods

GET - Search and Filters

GET forms update the URL and call loaders:

POST - Create Resources

PUT/PATCH - Update Resources

DELETE - Remove Resources

Form Data

Reading Form Data

File Uploads

Form State

Using Navigation

Accessing Submission Data

Validation

Client-Side Validation

Server-Side Validation

Form Submission Flow

Fetcher Forms

Submit forms without navigation:

Multiple Fetchers

Programmatic Submission

useSubmit Hook

Submit Options

Optimistic UI

Form Actions

Multiple Actions in One Route

Button-Based Actions

Form Reset

Best Practices

  1. Use Form for mutations - Not regular <form>
  2. Validate on server - Never trust client validation alone
  3. Return errors, don’t throw - Better UX for validation failures
  4. Use fetchers for inline interactions - Likes, toggles, etc.
  5. Implement optimistic UI - Update immediately, confirm later
  6. Disable buttons during submission - Prevent double submits
  7. Reset forms after success - Clear fields when appropriate
  8. Use intent fields - Handle multiple actions in one route
  9. Follow POST/Redirect/GET - Redirect after successful mutations
  10. Provide loading states - Show progress during submission