0Pricing
React Academy · Lección

Mutaciones y actualizaciones optimistas con SWR

Usar mutate() y useSWRMutation para operaciones de escritura con una interfaz optimista y rollback automático

Mutaciones y actualizaciones optimistas con SWR 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.

mutate: revalidación por clave

La función mutate global de swr permite activar la revalidación de cualquier key de caché desde cualquier lugar de la aplicación: mutate('/api/user') hace que todos los hooks useSWR('/api/user') vuelvan a obtener los datos.

Impórtela con: import { mutate } from 'swr'. Esto resulta útil para invalidar datos después de una acción del servidor realizada fuera de un componente que tenga acceso directo a la función mutate vinculada.

mutate con datos: actualizar la caché sin volver a obtener datos

Pase los datos como segundo argumento de mutate: mutate('/api/user', updatedUser) establece inmediatamente la caché en updatedUser sin realizar una solicitud de red. A esto a veces se le llama mutación local.

Añada { revalidate: false } como tercer argumento para evitar que SWR vuelva a obtener los datos después de la actualización optimista.

useSWRMutation: para activaciones explícitas

useSWRMutation está diseñado para mutaciones iniciadas por el usuario (envíos de formularios y clics en botones), en lugar de para la obtención automática. No se ejecuta al montarse; solo se ejecuta cuando se llama a trigger().

Impórtelo desde swr/mutation: const { trigger, isMutating, data, error } = useSWRMutation('/api/post', sendRequest).

Firma del fetcher de useSWRMutation

El fetcher de useSWRMutation recibe (key, { arg}), donde arg es el valor que se pasa a trigger(). Ejemplo: async (url, { arg: newPost }) => fetch(url, { method: 'POST', body: JSON.stringify(newPost) }).

Llame a trigger({ title: 'New Post', content: '...' }) para ejecutar la mutación con los datos de la publicación como arg.

Estado de isMutating

isMutating de useSWRMutation es true mientras la solicitud de mutación está en curso. Utilícelo para deshabilitar los botones de envío y mostrar indicadores de carga durante la solicitud, evitando envíos duplicados.

Esto reemplaza la variable de estado isSubmitting que, de otro modo, tendría que gestionar manualmente con useState.

Explicación de las actualizaciones optimistas

Una actualización optimista aplica inmediatamente a la interfaz de usuario el resultado esperado antes de que el servidor confirme el cambio. Si el servidor responde correctamente, no es necesario hacer nada más. Si falla, la actualización se revierte al estado anterior.

Este patrón hace que las interfaces parezcan instantáneas: un botón de «Me gusta» aparece pulsado de inmediato, sin esperar la respuesta de POST.

Actualizaciones optimistas con SWR

Utilice mutate(key, newData, { optimisticData: optimisticValue, rollbackOnError: true }). SWR establece inmediatamente la caché en optimisticValue, envía la solicitud de revalidación y revierte el valor anterior si la solicitud genera una excepción.

La opción rollbackOnError: true es esencial para garantizar el comportamiento correcto: sin ella, una mutación fallida deja datos optimistas obsoletos en la caché.

Reversión automática en caso de error

Cuando se establece rollbackOnError: true y la mutación se rechaza, SWR restaura automáticamente la caché a la instantánea tomada antes de la actualización optimista. No se necesita código de reversión manual.

Además, establezca populateCache: false si el cuerpo de la respuesta de la mutación no coincide con la forma de los datos de useSWR, para evitar que la respuesta actualice incorrectamente la caché.

mutate enlazada frente a mutate global

useSWR devuelve una mutate enlazada: const { data, mutate } = useSWR('/api/user', fetcher). Esta mutate enlazada apunta automáticamente a la clave '/api/user'; no es necesario volver a pasarle la clave.

Utilice la mutate enlazada dentro de los componentes que muestran los datos que poseen. Utilice la mutate global de swr cuando necesite invalidar una clave desde un componente no relacionado o desde una función de utilidad.

Comparación con las mutaciones de React Query

El useMutation de React Query tiene un patrón trigger/isMutating similar. Diferencias clave: la función de devolución de llamada onSuccess de React Query, junto con queryClient.invalidateQueries, es el patrón idiomático para invalidar la caché. SWR utiliza directamente la función mutate para actualizar la caché.

Ambas bibliotecas admiten actualizaciones optimistas y reversiones, pero la forma de su API es diferente. Los equipos con experiencia en una pueden aprender la otra rápidamente.

Estrategia de caché después de una mutación

Después de una mutación correcta, tiene tres opciones: volver a obtener los datos llamando a mutate(key), actualizar la caché con el cuerpo de la respuesta (si la API devuelve el recurso actualizado) o combinar ambas opciones mediante actualizaciones optimistas y revalidación.

Para mutaciones sobre listas (como añadir un elemento), actualice manualmente la caché para agregar el elemento nuevo y, después, revalide para confirmar el estado del servidor. Así evitará volver a obtener la lista completa y mantendrá los datos coherentes.

Reversión de una actualización optimista

¿Qué opción debe establecer en mutate de SWR para revertir automáticamente una actualización optimista cuando se produce un error?

Resumen de la lección

Global mutate(key) activa la revalidación; mutate(key, data) actualiza la caché sin volver a obtener los datos. useSWRMutation gestiona mutaciones explícitas iniciadas por el usuario mediante trigger(), el estado isMutating y la compatibilidad con extraArg. Las actualizaciones optimistas con optimisticData y rollbackOnError: true hacen que las interfaces parezcan instantáneas y permiten recuperarse automáticamente de los errores.

La mutate enlazada de useSWR apunta a su propia clave; la mutate global de swr funciona en cualquier lugar.

Preguntas frecuentes

¿La lección «Mutaciones y actualizaciones optimistas con SWR» es gratis?

Sí — el texto completo de «Mutaciones y actualizaciones optimistas con SWR» 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 «Mutaciones y actualizaciones optimistas con SWR»?

Usar mutate() y useSWRMutation para operaciones de escritura con una interfaz optimista y rollback automático 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 «Mutaciones y actualizaciones optimistas con SWR»?

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. Conceptos básicos de SWR: stale-while-revalidate
  2. Hook useSWR: obtención, carga y errores
  3. Mutaciones y actualizaciones optimistas con SWR
  4. SWR frente a React Query: elegir la herramienta adecuada
← Volver a React Academy