Patrones optimistas con React Query y Zustand
Usar las callbacks onMutate, onError y onSettled de React Query, junto con Zustand, para flujos estructurados de interfaces optimistas
Patrones optimistas con React Query y Zustand es una lección gratuita de React Academy en CoddyKit. Esta es la lección 4 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.
Descripción general de React Query useMutation
El hook useMutation de React Query proporciona infraestructura integrada para las actualizaciones optimistas mediante tres callbacks del ciclo de vida: onMutate (se ejecuta antes de la mutación y devuelve un objeto de contexto), onError (se ejecuta cuando falla y recibe el contexto) y onSettled (se ejecuta tanto si tiene éxito como si falla). Esta estructura está diseñada específicamente para los patrones optimistas.
onMutate: la fase de actualización optimista
En onMutate, realice tres pasos: primero, cancele las consultas en curso de los datos afectados (await queryClient.cancelQueries({ queryKey })); después, guarde una instantánea de la caché actual (queryClient.getQueryData(queryKey)); por último, aplique la actualización optimista a la caché (queryClient.setQueryData(queryKey, updater)). Devuelva la instantánea como contexto.
onError: revertir los cambios con el contexto
El callback onError recibe el error, las variables de la mutación y el contexto devuelto por onMutate. Use el contexto para revertir los cambios: queryClient.setQueryData(queryKey, context.previousData). El contexto conecta la instantánea tomada en onMutate con la reversión realizada en onError.
onSettled: volver a solicitar datos para sincronizar
El callback onSettled se ejecuta tanto si la operación tiene éxito como si falla. Úselo para volver a solicitar la consulta y sincronizarla con el estado del servidor: queryClient.invalidateQueries({ queryKey }). Esto garantiza que, después de cualquier mutación —tanto si tuvo éxito (el servidor puede haber transformado los datos) como si falló (la reversión se completó)—, el estado termine convergiendo hacia la información real del servidor.
Alternancia optimista de tareas con React Query
Un ejemplo práctico es alternar el estado de completado de una tarea. En onMutate, guarde una instantánea de la lista de tareas y, después, actualice la tarea específica en la caché. En onError, restaure la instantánea desde el contexto. En onSettled, invalide la consulta de tareas para volver a solicitar los datos. El usuario ve el cambio al instante y el servidor se sincroniza en segundo plano.
Actualizaciones optimistas con Zustand
En un almacén de Zustand, las actualizaciones optimistas son sencillas: cree una acción updateItem(id, changes) que actualice inmediatamente el elemento en el almacén y, después, llame a la API. Si la API falla, llame a otra acción revertItem(id, previousState). Las actualizaciones de estado síncronas de Zustand hacen que el paso optimista sea inmediato.
Immer con Zustand para actualizaciones complejas
Al actualizar de forma optimista un estado de Zustand profundamente anidado, use produce de immer para realizar mutaciones de forma clara: set(produce(state => { state.items[id] = { ...state.items[id], ...changes } })). Immer gestiona las actualizaciones inmutables con una sintaxis mutable, lo que hace que los cambios complejos en estados anidados sean legibles y seguros.
Hook useOptimistic de React 19
React 19 introdujo useOptimistic(state, updateFn) como hook integrado para las actualizaciones optimistas dentro de las Server Actions. const [optimisticState, addOptimistic] = useOptimistic(items, (state, newItem) => [...state, newItem]). Al llamar a addOptimistic(newItem), la interfaz de usuario se actualiza inmediatamente mientras la acción del servidor se ejecuta de forma asíncrona.
Reversión automática de useOptimistic
useOptimistic gestiona la reversión automáticamente. Cuando la Server Action termina (correctamente o con un error), React revierte el estado optimista y aplica el estado real del servidor. No necesita escribir lógica de reversión manual: React gestiona el ciclo de vida de la actualización optimista durante el límite Suspense de la acción.
Comparación de los tres enfoques
Las actualizaciones optimistas manuales ofrecen control total, pero requieren código repetitivo. React Query, mediante onMutate/onError/onSettled, se integra con la caché de consultas para sincronizarla automáticamente. useOptimistic es la opción más sencilla para las Server Actions, pero requiere React 19 y una arquitectura basada en acciones del servidor. Elija según su capa de datos: manual para estados locales sencillos, React Query para API REST y useOptimistic para RSC/Server Actions.
Elección del patrón adecuado
Tenga en cuenta su arquitectura al elegir un patrón optimista. Si usa React Query en toda la aplicación, su patrón onMutate es coherente y tiene en cuenta la caché. Si usa Zustand para el estado global, el patrón basado en acciones encaja de forma natural. Si trabaja con React 19 y Server Actions, useOptimistic es la opción idiomática. Es habitual y aceptable combinar patrones en una misma aplicación.
Valor devuelto por React Query onMutate
¿Qué debe devolver el callback onMutate en React Query para permitir la reversión en onError?
Resumen de la lección: patrones optimistas
React Query useMutation usa onMutate (cancela consultas, guarda una instantánea, aplica la actualización optimista y devuelve el contexto), onError (restaura la instantánea desde el contexto) y onSettled (invalida la consulta para volver a solicitar los datos). Las actualizaciones optimistas de Zustand llaman primero a la acción de estado y después a la API, y revierten los cambios si falla. React 19 useOptimistic proporciona una reversión automática dentro de las Server Actions. Elija el patrón que se adapte a la arquitectura de su capa de datos.
Preguntas frecuentes
¿La lección «Patrones optimistas con React Query y Zustand» es gratis?
Sí — el texto completo de «Patrones optimistas con React Query y Zustand» 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 «Patrones optimistas con React Query y Zustand»?
Usar las callbacks onMutate, onError y onSettled de React Query, junto con Zustand, para flujos estructurados de interfaces optimistas 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 4 de 4.
¿Cuánto tiempo toma la lección «Patrones optimistas con React Query y Zustand»?
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
- Qué es la interfaz optimista y cuándo usarla
- Implementar actualizaciones optimistas manualmente
- Rollback ante errores y resolución de conflictos
- Patrones optimistas con React Query y Zustand