Guía práctica para aprender a consumir APIs en Next.js usando
SWR y Axios, evitando el uso manual de useEffect
y useState
.
Mejorando la experiencia del usuario con datos siempre frescos y sin la necesidad de usar useEffect
y useState
en cada petición.
Instala las dependencias necesarias:
npm install swr axios
# o
yarn add swr axios
Crea un archivo lib/fetcher.js
para centralizar las peticiones con
Axios:
// lib/fetcher.js
import axios from "axios";
export const fetcherAxios = async (url) => {
try {
const { data } = await axios.get(url);
return data; // normalizamos la respuesta para SWR
} catch (err) {
throw err.response?.data || new Error(err.message);
}
};
Ejemplo en src/app/page.js
:
"use client";
import useSWR from "swr";
import { fetcherAxios } from "@/lib/fetcher";
export default function HomePage() {
const { data, error, isLoading } = useSWR(
"https://devsapihub.com/api-users",
fetcherAxios
);
if (isLoading) return <p>Cargando usuarios...</p>;
if (error) return <p>Error al cargar usuarios 😢</p>;
return (
<main className="p-6">
<h1 className="text-xl font-bold mb-4">Lista de Usuarios</h1>
<ul className="space-y-2">
{data?.map((user) => (
<li key={user.id} className="p-2 border rounded">
{user.name}
</li>
))}
</ul>
</main>
);
}
- 🔄 Caché automática: guarda y comparte datos entre componentes.\
- ♻️ Revalidación: actualiza datos en segundo plano.\
- 🚨 Manejo de errores: integrado y sencillo.\
- 🔁 Reintentos automáticos: en caso de error de red.\
- ⏱ Polling: actualizaciones periódicas con
refreshInterval
.\ - 🧩 Prefetching: carga anticipada de datos al pasar el mouse sobre enlaces.
- ✅ Código más limpio y legible.
- ✅ Menos boilerplate comparado con
useEffect
+useState
. - ✅ Mejor experiencia de usuario con datos siempre frescos.
- ✅ Optimización de rendimiento automática.
- ✅ Compatible con REST y GraphQL.
Si el proyecto te sirvió, dale una ⭐ en GitHub
Recomiéndalo a otros desarrolladores
PayPal: [email protected]
¡Gracias por tu apoyo! 🚀