action
A server-side function that handles data mutations (form submissions, API calls) for a route.Signature
Arguments passed to the action function
Can return:
- A Response object (redirect, json, etc.)
- Plain data (accessible via
useActionData()) - A Promise resolving to either
Basic Example
Handling Form Data
Validation and Error Handling
JSON Submissions
Multiple Actions with Intent
File Uploads
Best Practices
Always revalidate after mutations
Always revalidate after mutations
By default, loaders are automatically revalidated after actions. This ensures your UI stays in sync:
Return data for optimistic UI
Return data for optimistic UI
Return data instead of redirecting to enable optimistic updates:
Use redirect after successful mutations
Use redirect after successful mutations
For create/delete operations, redirect to the appropriate page:
Handle errors appropriately
Handle errors appropriately
Throw responses for error boundaries or return errors for inline display:
See Also
- clientAction - Client-side mutations
- useActionData - Access action data in components
- Form - Form component for submissions