Tutorials Courses Interview Prep (100 Q&A) AI Tools (50) Developer Tools (50) Tracks Pricing Plans Blog & Articles Contact Us
Advanced React 19 & Production Patterns 22 mins read Free Lesson

React 19 Actions, useActionState & useOptimistic

Leverage native React 19 asynchronous form actions, pending transitions, and optimistic client updates.

React 19 Native Form Actions

React 19 introduces native support for asynchronous functions in <form action={...}> alongside useActionState and useOptimistic.

import { useActionState, useOptimistic } from 'react';

async function updateProfile(prevState, formData) {
    const name = formData.get('name');
    await fetch('/api/user', { method: 'POST', body: JSON.stringify({ name }) });
    return { name };
}

export function ProfileForm({ initialName }) {
    const [state, formAction, isPending] = useActionState(updateProfile, { name: initialName });
    const [optimisticName, setOptimisticName] = useOptimistic(state.name, (current, update) => update);

    return (
        <form action={async (formData) => {
            setOptimisticName(formData.get('name'));
            await formAction(formData);
        }}>
            <h2>Hello, {optimisticName}</h2>
            <input name="name" defaultValue={state.name} />
            <button disabled={isPending}>{isPending ? 'Saving...' : 'Update'}</button>
        </form>
    );
}