# using-react-actions > Use when working with React forms, async actions, or needing optimistic UI updates - Author: Dario Farzati - Repository: mostlyhumanagency/claude-plugin-coding-react - Version: 20260209222058 - Stars: 0 - Forks: 0 - Last Updated: 2026-02-10 - Source: https://github.com/mostlyhumanagency/claude-plugin-coding-react - Web: https://mule.run/skillshub/@@mostlyhumanagency/claude-plugin-coding-react~using-react-actions:20260209222058 --- --- name: using-react-actions description: Use when working with React forms, async actions, or needing optimistic UI updates --- ## Overview React Actions are async functions used in transitions that automatically handle pending states, errors, forms, and optimistic updates. They unify form handling through three key hooks: `useActionState` for managing submission state, `useFormStatus` for reading parent form status, and `useOptimistic` for immediate UI feedback. ## When to Use - Handling form submissions with built-in pending/error states - Creating reusable submit buttons that reflect form status - Showing optimistic UI updates before server response - Managing complex form workflows with validation and errors - Coordinating multiple async operations with user feedback **When NOT to use:** - Simple onClick handlers without forms (use regular async functions) - Read-only data fetching (use server components or queries) - Non-form transitions (use `useTransition` directly) ## Core Patterns ### Form with useActionState Manages form submission state, errors, and pending status in one hook. ```tsx import { useActionState } from "react"; async function addToCart(prevState: { message: string } | null, formData: FormData) { const itemId = formData.get("itemId") as string; const result = await api.addToCart(itemId); if (!result.success) return { message: result.error }; return null; } function AddToCartForm({ itemId }: { itemId: string }) { const [state, formAction, isPending] = useActionState(addToCart, null); return (
); } ``` ### Reusable Submit Button with useFormStatus Read parent form status without prop drilling — must be a child of ` ``` ### Optimistic Updates with useOptimistic Show immediate feedback while async action completes, auto-reverts on error. ```tsx import { useOptimistic } from "react"; function TodoList({ todos, addTodoAction }: { todos: Todo[]; addTodoAction: (formData: FormData) => Promise