0Pricing
React Academy · Lección

React Actions y useActionState

Defina acciones de servidor y de cliente, gestione envíos de formularios y realice un seguimiento de los estados pendientes.

React Actions y useActionState es una lección gratuita de React Academy en CoddyKit. Esta es la lección 3 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.

Bienvenida

En esta lección definirá React 19 Actions, utilizará useActionState para gestionar el estado del envío de formularios y manejará correctamente los estados de espera y de error.

¿Qué son React Actions?

Las Actions son funciones asíncronas que se pasan a la prop `action` del formulario (o a `formAction` del botón). React 19 las trata de forma especial: realiza el seguimiento del estado de espera, gestiona los errores y se integra automáticamente con Transitions.

Server Actions en Next.js

En Next.js con App Router, añada 'use server' al principio de una función para convertirla en una Server Action. React la ejecuta en el servidor cuando se envía un formulario, sin necesidad de una ruta de API.
'use server';

export async function createPost(formData) {
  const title = formData.get('title');
  await db.insert(posts).values({ title });
  revalidatePath('/posts');
}

Uso de una Action en un formulario

Pase la acción de servidor o de cliente directamente a la prop `action` del formulario. React la ejecutará con el FormData cuando se envíe el formulario.
import { createPost } from './actions';

export default function NewPostForm() {
  return (
    <form action={createPost}>
      <input name="title" />
      <button type="submit">Create</button>
    </form>
  );
}

useActionState

useActionState envuelve una action para proporcionarle el estado actual (el resultado de la última action) y un booleano que indica si está pendiente. La función envuelta se pasa a form action.
'use client';
import { useActionState } from 'react';
import { createPost } from './actions';

function NewPostForm() {
  const [state, action, isPending] = useActionState(createPost, null);
  return (
    <form action={action}>
      {state?.error && <p>{state.error}</p>}
      <input name="title" />
      <button disabled={isPending}>Create</button>
    </form>
  );
}

Action que devuelve un estado

La Server Action recibe `(prevState, formData)` cuando se utiliza con useActionState. Devuelva un objeto con información de éxito o error; este se convertirá en el nuevo estado.
'use server';

export async function createPost(prevState, formData) {
  const title = formData.get('title')?.toString();
  if (!title) return { error: 'Title is required' };
  await db.insert(posts).values({ title });
  return { success: true };
}

isPending para deshabilitar el envío

Utilice el valor isPending de useActionState para deshabilitar el botón de envío y mostrar un indicador de carga mientras se ejecuta la action.
<button type="submit" disabled={isPending}>
  {isPending ? 'Saving...' : 'Save'}
</button>

Client Actions

Las Actions no tienen que ejecutarse en el servidor. Una Client Action es una función asíncrona normal sin 'use server'. Aun así, recibe la gestión del estado y del estado de espera de useActionState.
async function clientAction(prevState, formData) {
  const res = await fetch('/api/post', {
    method: 'POST', body: formData,
  });
  if (!res.ok) return { error: 'Failed' };
  return { success: true };
}

useFormStatus para componentes secundarios

En un botón de envío profundamente anidado, utilice `useFormStatus()` para leer el estado de espera del formulario principal sin tener que pasar props por toda la jerarquía.
'use client';
import { useFormStatus } from 'react-dom';

function SubmitButton() {
  const { pending } = useFormStatus();
  return <button disabled={pending}>Submit</button>;
}

Mejora progresiva

Las React Actions con Server Actions funcionan incluso sin JavaScript (mejora progresiva). El navegador envía un POST de formulario nativo al controlador de Next.js, de modo que la funcionalidad está disponible antes de que se cargue JavaScript.

Comprobación rápida

¿Qué devuelve useActionState que le permite mostrar un estado de carga mientras se ejecuta una action del formulario?

Resumen

Las React Actions son funciones asíncronas que se pasan a la action del formulario. useActionState envuelve una action para proporcionarle el estado, una función action envuelta y isPending. Las Server Actions incluyen 'use server' y se ejecutan en el servidor.

A continuación

Siguiente lección: **useOptimistic para una respuesta instantánea** — mostrará actualizaciones optimistas de la interfaz mientras una mutación del servidor está en curso.

Preguntas frecuentes

¿La lección «React Actions y useActionState» es gratis?

Sí — el texto completo de «React Actions y useActionState» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.

¿Qué aprenderé en «React Actions y useActionState»?

Defina acciones de servidor y de cliente, gestione envíos de formularios y realice un seguimiento de los estados pendientes. Practicas React Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar React Academy?

No se requiere experiencia previa. React Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 3 de 4.

¿Cuánto tiempo toma la lección «React Actions y useActionState»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de React Academy?

Sí. Cada lección de React Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Explicación de los React Server Components
  2. El hook use() para recursos asíncronos
  3. React Actions y useActionState
  4. useOptimistic para respuestas instantáneas
← Volver a React Academy