0Pricing
React Academy · Lección

Rollback ante errores y resolución de conflictos

Restaurar el estado anterior cuando falle una mutación y gestionar correctamente los cambios optimistas rechazados por el servidor

Rollback ante errores y resolución de conflictos 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.

La complejidad de la reversión aumenta según el tipo de mutación

Revertir una adición optimista (eliminar el elemento) o una eliminación (restaurar el elemento) es sencillo. Revertir una actualización es más complejo: debe restaurar el valor anterior exacto. Si el elemento se actualizó varias veces de forma optimista, debe realizar un seguimiento de cada valor anterior por separado, no solo del estado original del servidor.

El escenario de conflicto en una actualización

Considere este escenario: el servidor tiene un elemento con el valor Z. Usted lo actualiza de forma optimista a X. Mientras la solicitud está en curso, otro usuario actualiza el mismo elemento a Y en el servidor. Su solicitud llega y el servidor la rechaza (conflicto). El objetivo de la reversión es Z, pero el estado actual del servidor es Y. Restaurar Z sobrescribiría Y de forma incorrecta.

Volver a solicitar los datos en caso de error como opción predeterminada segura

La estrategia de reversión más segura para las actualizaciones consiste en volver a solicitar el elemento al servidor ante cualquier error de mutación, en lugar de restaurar una instantánea capturada localmente. Esto garantiza que se muestre el estado autoritativo del servidor, independientemente de los cambios simultáneos que hayan realizado otros usuarios. Volver a solicitar los datos es más lento, pero siempre es correcto.

Estado de conflicto HTTP 409

Una API bien diseñada devuelve HTTP 409 Conflict cuando una actualización optimista falla debido a una modificación simultánea. El cuerpo de la respuesta suele incluir el estado actual del servidor. Su controlador de errores debe detectar el estado 409, usar el cuerpo de la respuesta para actualizar el estado local con el valor actual del servidor y notificar al usuario que sus cambios no se guardaron.

Idempotencia para reintentos seguros

Una mutación idempotente produce el mismo resultado cuando se aplica varias veces. Diseñar mutaciones idempotentes (usando PUT en lugar de POST, incluyendo el estado completo del recurso y usando claves de idempotencia) permite reintentar de forma segura cuando se produce un error, sin riesgo de aplicar el cambio dos veces. Esto simplifica considerablemente la lógica de reversión.

Desduplicación con isSubmitting

Los dobles clics en un botón de envío pueden ejecutar dos mutaciones idénticas. Evítelo con un indicador isSubmitting: establézcalo en true cuando comience la mutación y restablézcalo cuando termine, tanto si tiene éxito como si falla. Deshabilite el elemento disparador cuando isSubmitting sea true. Esto elimina las mutaciones duplicadas en el nivel de la interfaz de usuario.

Claves de idempotencia para la desduplicación en el servidor

Para realizar la desduplicación en el servidor, incluya un encabezado Idempotency-Key único en cada solicitud de mutación. Genérelo con crypto.randomUUID() cuando el usuario inicie la acción. El servidor detecta las claves duplicadas y devuelve la misma respuesta que la solicitud original sin volver a aplicar la operación.

Indicadores de consistencia eventual

Mientras una mutación está en curso, puede mostrar un indicador sutil de que el estado optimista aún no está confirmado: un pequeño punto pulsante, el texto "Guardando..." o una opacidad reducida en el elemento. Esto comunica la incertidumbre sin bloquear la interacción. Quite el indicador cuando la operación tenga éxito o revierta los cambios si falla.

Límites de error para fallos de mutaciones

Los errores inesperados en la lógica de reversión (por ejemplo, acceder a propiedades de undefined durante la restauración del estado) pueden bloquear el componente. Envuelva los componentes que realizan muchas mutaciones en un límite de error para que los fallos catastróficos de reversión muestren una interfaz de error adecuada en lugar de una pantalla en blanco. Registre estos errores para depurarlos.

Versionado para detectar conflictos

Una estrategia fiable para detectar conflictos consiste en incluir un número de versión o un ETag en cada mutación. El servidor compara la versión enviada por el cliente con su versión actual. Si difieren (se produjo otra actualización), devuelve 409. Esto es control de concurrencia optimista: se supone que no hay conflictos, pero se detectan cuando ocurren.

Pruebas de las rutas de reversión

La lógica de reversión a menudo no se prueba porque los fallos de red son difíciles de simular. Use herramientas como Mock Service Worker (MSW) para devolver respuestas de error en las pruebas. Escriba pruebas explícitas para: gestión del conflicto 409, reversión tras un tiempo de espera de red, desduplicación de dobles clics y coherencia del estado después de un fallo. Los errores suelen ocultarse en estos casos límite.

Estado HTTP para detectar conflictos

¿Qué código de estado HTTP devuelve una API bien diseñada cuando una actualización optimista falla debido a una modificación simultánea realizada por otro usuario?

Resumen de la lección: reversiones y conflictos

La reversión de una actualización es más compleja que la de una adición o eliminación: vuelva a solicitar siempre los datos cuando se produzca un error para evitar problemas con instantáneas obsoletas. HTTP 409 Conflict indica fallos de concurrencia optimista; use el cuerpo de la respuesta para restaurar el estado actual del servidor. Diseñe mutaciones idempotentes para permitir reintentos seguros. Evite ejecuciones duplicadas con isSubmitting y claves de idempotencia en el servidor. Pruebe explícitamente las rutas de reversión mediante MSW para simular errores.

Preguntas frecuentes

¿La lección «Rollback ante errores y resolución de conflictos» es gratis?

Sí — el texto completo de «Rollback ante errores y resolución de conflictos» 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 «Rollback ante errores y resolución de conflictos»?

Restaurar el estado anterior cuando falle una mutación y gestionar correctamente los cambios optimistas rechazados por el servidor 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 «Rollback ante errores y resolución de conflictos»?

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. Qué es la interfaz optimista y cuándo usarla
  2. Implementar actualizaciones optimistas manualmente
  3. Rollback ante errores y resolución de conflictos
  4. Patrones optimistas con React Query y Zustand
← Volver a React Academy