0Pricing
React Academy · Lección

useActionState y useFormStatus

Use useActionState para realizar un seguimiento del estado pendiente y de los errores, y useFormStatus para deshabilitar los botones de envío durante la ejecución.

useActionState y useFormStatus 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.

Introducción a useActionState

useActionState(action, initialState) es un hook de React 19 que envuelve un Server Action para realizar un seguimiento de su estado entre envíos. Recibe la función de acción y un valor de estado inicial, y devuelve una tupla que puede utilizar para controlar toda la experiencia del formulario.

La tupla devuelta

El hook devuelve [state, formAction, isPending]. state contiene el valor devuelto más reciente por la acción (inicialmente es null o el valor inicial). formAction es la acción envuelta que debe pasar al formulario. isPending es true mientras la acción se ejecuta en el servidor.

Seguimiento del estado entre envíos

Cada vez que se envía el formulario, se ejecuta el Server Action y su valor devuelto se convierte en el nuevo state. En el primer renderizado, state es igual a initialState. Esto facilita mostrar una interfaz diferente según haya habido envíos anteriores y según lo que hayan devuelto.

Visualización de errores de validación en línea

Si el Server Action devuelve { errors: { email: 'Invalid email' } }, puede mostrar el error en línea: {state.errors?.email && <p>{state.errors.email}</p>}. Como el estado persiste entre los nuevos renderizados, el mensaje de error permanece visible hasta que un envío correcto posterior sustituye el estado.

Visualización de mensajes de éxito

Cuando la acción devuelve { success: true }, el componente puede mostrar un mensaje de éxito: {state?.success && <p>Form submitted!</p>}. El formulario puede ocultarse o sustituirse condicionalmente por el mensaje de éxito según el valor del estado.

Introducción a useFormStatus

useFormStatus() es un hook que lee el estado pendiente del elemento <form> antecesor más cercano. Devuelve un objeto que incluye { pending: boolean }. Este hook debe utilizarse dentro de un componente que sea hijo del formulario, no en el componente que renderiza el propio formulario.

Motivo de la restricción de ubicación

La restricción que exige utilizar useFormStatus dentro del formulario existe porque el hook lee el contexto del formulario desde el árbol de React que se encuentra por encima. Si se llamara desde el mismo componente que renderiza el formulario, sería un componente hermano del formulario, no un descendiente, y no tendría acceso al estado del formulario.

Creación de un componente de botón de envío

El patrón estándar consiste en extraer el botón de envío a su propio componente: function SubmitButton() { const { pending } = useFormStatus(); return <button disabled={pending}>Submit</button>; }. Después, este componente se coloca dentro del formulario, lo que le permite acceder al estado pendiente del formulario.

Desactivación del botón de envío

Establecer disabled={pending} en el botón de envío evita los envíos duplicados. Cuando el usuario hace clic en enviar y el Server Action se está ejecutando, pending es true, por lo que el botón se desactiva y no se puede pulsar. Cuando la acción termina, pending vuelve a false y el botón se habilita de nuevo.

Combinación de ambos hooks

El patrón completo de experiencia de usuario para formularios combina ambos hooks: useActionState en el componente del formulario realiza un seguimiento del resultado de la acción y proporciona formAction, mientras que useFormStatus dentro de un componente hijo SubmitButton realiza un seguimiento del estado pendiente. Juntos proporcionan la visualización de errores de validación y un botón de envío adaptable.

Interfaz de usuario optimista con useOptimistic

Para obtener una respuesta aún más rápida, useOptimistic se combina con useActionState. La interfaz se actualiza inmediatamente con el resultado esperado antes de que responda el servidor y después se ajusta cuando llega la respuesta real. Este patrón es habitual en botones de «Me gusta», listas de tareas y otras interacciones que requieren una respuesta inmediata.

Ubicación de useFormStatus

¿Dónde debe llamarse a useFormStatus para que funcione correctamente?

Resumen de la lección

useActionState(action, initialState) devuelve [state, formAction, isPending] para realizar un seguimiento de los resultados de Server Actions. El estado contiene el valor devuelto por la acción, lo que permite mostrar errores y mensajes de éxito en línea. useFormStatus() proporciona { pending } dentro de los componentes hijos del formulario, lo que permite crear botones de envío adaptables. Ambos hooks juntos crean una experiencia de formulario completa y accesible.

Preguntas frecuentes

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

Sí — el texto completo de «useActionState y useFormStatus» 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 «useActionState y useFormStatus»?

Use useActionState para realizar un seguimiento del estado pendiente y de los errores, y useFormStatus para deshabilitar los botones de envío durante la ejecución. 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 «useActionState y useFormStatus»?

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. Server Actions en React 19 y Next.js
  2. Acciones de formularios: sustitución de las rutas de API para mutaciones
  3. useActionState y useFormStatus
  4. Mejora progresiva con Server Actions
← Volver a React Academy