Consumo de APIs con Fetch: loading, error y éxito

Aprende a modelar correctamente los estados de una petición HTTP en React para evitar UIs rotas o confusas.

En interfaces reales no basta con 'pedir datos y pintarlos': necesitas gestionar estados intermedios y errores de red de forma explícita.

El patrón base consiste en modelar al menos tres situaciones: carga, éxito y error.

Si omites estos estados, el usuario verá parpadeos, pantallas vacías o mensajes poco claros cuando algo falle.

Con React, la clave es convertir cada estado de red en una representación visual coherente y predecible.

  • Una petición no es binaria; tiene fases con impacto directo en UX.
  • Durante `loading` debes mostrar feedback visual para evitar sensación de app congelada.
  • En `error` conviene mostrar mensaje legible y, si aplica, acción de reintento.
  • En `success` renderizas datos, pero contemplando también el caso de lista vacía.
  • isLoading

Modelar estados de red correctamente

Una petición no es binaria; tiene fases con impacto directo en UX.

Durante `loading` debes mostrar feedback visual para evitar sensación de app congelada.

En `error` conviene mostrar mensaje legible y, si aplica, acción de reintento.

En `success` renderizas datos, pero contemplando también el caso de lista vacía.

  • isLoading
  • error
  • data
  • empty state

Fetch en useEffect con control básico

El effect arranca la petición cuando el componente monta o cambian dependencias relevantes.

Errores comunes en fetch manual

El patrón manual funciona, pero hay trampas habituales.

No cancelar peticiones al desmontar puede provocar actualizaciones sobre componentes ya desmontados.

Duplicar lógica de loading/error en muchas pantallas aumenta deuda técnica.

No cachear respuestas repite llamadas innecesarias y empeora percepción de rendimiento.

React
13

Consumo de APIs con Fetch: loading, error y éxito

Aprende a modelar correctamente los estados de una petición HTTP en React para evitar UIs rotas o confusas.

Código del tema: const { data } = useQuery({ queryKey:["items"] });

📘 Teoría

Modelar estados de red correctamente

Una petición no es binaria; tiene fases con impacto directo en UX.

Durante `loading` debes mostrar feedback visual para evitar sensación de app congelada.

En `error` conviene mostrar mensaje legible y, si aplica, acción de reintento.

En `success` renderizas datos, pero contemplando también el caso de lista vacía.

  • isLoading
  • error
  • data
  • empty state

Fetch en useEffect con control básico

El effect arranca la petición cuando el componente monta o cambian dependencias relevantes.

Patrón base de carga de datos
import { useEffect, useState } from 'react';

function UsersList() {
  const [users, setUsers] = useState([]);
  const [isLoading, setIsLoading] = useState(true);
  const [error, setError] = useState(null);

  useEffect(() => {
    async function loadUsers() {
      try {
        const res = await fetch('/api/users');
        if (!res.ok) throw new Error('Error al cargar usuarios');
        const data = await res.json();
        setUsers(data);
      } catch (err) {
        setError(err.message);
      } finally {
        setIsLoading(false);
      }
    }

    loadUsers();
  }, []);

  if (isLoading) return <p>Cargando...</p>;
  if (error) return <p>{error}</p>;

  return <ul>{users.map((u) => <li key={u.id}>{u.name}</li>)}</ul>;
}

Errores comunes en fetch manual

El patrón manual funciona, pero hay trampas habituales.

1

No cancelar peticiones al desmontar puede provocar actualizaciones sobre componentes ya desmontados.

2

Duplicar lógica de loading/error en muchas pantallas aumenta deuda técnica.

3

No cachear respuestas repite llamadas innecesarias y empeora percepción de rendimiento.

🧪 Aprende probando

Ejemplo Ejemplo: listado de posts con estado vacío Incluye control de carga, error y caso sin resultados.

🏁 Retos

Reto Reto: añade estado de error Completa el componente para mostrar error si la petición falla.

🧰 Recursos

Test

Comprueba tus conocimientos con un test sobre React.

Test de React

¿Qué es esto?

Soy Cristian Eslava y a veces hago webs para procrastinar yo y vosotros 😉.

Esta la hice en febrero de 2026 para facilitar el aprendizaje de mis alumnxs. Aprender desarrollo web practicando. La idea es que crezca semanalmente con nuevos temas, tests y retos.

Inspirado en MDN, en W3Schools, en Codepen, en el crack de Manz y en mil sitios de documentación sobre desarrollo web. Quería aportar además de bloques teóricos con ejemplos, la gamificación de los retos y el sistema de test que ya tenía en culTest .

Si te gustó, si no te gustó, si quieres saludarme, o invitarme a 🍻 no dudes en escribirme en cristianeslava@gmail.com .