馃摗 Fetching de datos desde APIs externas

Next.js Fetching de datos desde APIs externas

10 - 馃摗 Fetching de datos desde APIs externas

Aprende c贸mo obtener datos desde APIs externas en tus proyectos Next.js, tanto del lado del cliente (CSR) como del servidor (SSR o SSG). Veremos ejemplos pr谩cticos con fetch y useEffect.


馃實 ¿Qu茅 significa “fetching de datos”?

“Fetching de datos” se refiere a obtener informaci贸n desde una fuente externa, como una API REST o una base de datos. En Next.js podemos hacerlo en diferentes momentos:

  • 馃敼 Durante el build — con getStaticProps (SSG)
  • 馃敼 En cada petici贸n — con getServerSideProps (SSR)
  • 馃敼 En el navegador — usando React y useEffect (CSR)

馃摝 Ejemplo 1 — Fetch en el build con getStaticProps

Este m茅todo obtiene los datos durante el proceso de compilaci贸n, generando una p谩gina est谩tica optimizada y r谩pida.

// pages/productos.js
export async function getStaticProps() {
  const res = await fetch('https://fakestoreapi.com/products?limit=3');
  const productos = await res.json();

  return { props: { productos } };
}

export default function Productos({ productos }) {
  return (
    <div className="p-4">
      <h1 className="text-2xl font-bold mb-3">馃洅 Productos (SSG)</h1>
      {productos.map(prod => (
        <div key={prod.id} className="border-b pb-2 mb-2">
          <h4>{prod.title}</h4>
          <p>馃挷{prod.price}</p>
        </div>
      ))}
    </div>
  );
}
      

馃З Resultado visual:

馃洅 Producto A — 馃挷19.99

馃洅 Producto B — 馃挷25.50

馃洅 Producto C — 馃挷32.00

Generado en el build con datos de una API externa.

✅ Ideal para: productos, listados est谩ticos, contenido que no cambia con frecuencia.

⚙️ Ejemplo 2 — Fetch en el servidor con getServerSideProps

Este enfoque obtiene los datos en cada solicitud. Es 煤til cuando la informaci贸n cambia frecuentemente o depende de un usuario autenticado.

// pages/noticias.js
export async function getServerSideProps() {
  const res = await fetch('https://newsapi.org/v2/top-headlines?country=us&apiKey=demo');
  const data = await res.json();

  return {
    props: { noticias: data.articles.slice(0, 3) },
  };
}

export default function Noticias({ noticias }) {
  return (
    <div className="p-4">
      <h1 className="text-2xl font-bold mb-3">馃摪 脷ltimas noticias (SSR)</h1>
      {noticias.map((n, i) => (
        <article key={i} className="border-b pb-2 mb-2">
          <h4>{n.title}</h4>
          <p>{n.source.name}</p>
        </article>
      ))}
    </div>
  );
}
      

馃З Resultado visual:

馃摪 T铆tulo de noticia 1 — Fuente: CNN

馃摪 T铆tulo de noticia 2 — Fuente: BBC

馃摪 T铆tulo de noticia 3 — Fuente: Reuters

Se actualiza cada vez que el usuario accede a la p谩gina.

馃挕 Ideal para: datos din谩micos, noticias, estad铆sticas o dashboards.

馃 Ejemplo 3 — Fetch del lado del cliente (CSR)

Tambi茅n puedes obtener datos directamente desde el navegador usando React Hooks. Esto es 煤til para contenido interactivo o que depende de la acci贸n del usuario.

// pages/clientefetch.js
import { useState, useEffect } from 'react';

export default function ClienteFetch() {
  const [usuarios, setUsuarios] = useState([]);

  useEffect(() => {
    fetch('https://jsonplaceholder.typicode.com/users')
      .then(res => res.json())
      .then(data => setUsuarios(data.slice(0, 3)));
  }, []);

  return (
    <div className="p-4">
      <h1 className="text-2xl font-bold mb-3">馃懃 Usuarios (CSR)</h1>
      {usuarios.map(u => (
        <p key={u.id}>{u.name}</p>
      ))}
    </div>
  );
}
      

馃З Resultado visual:

馃懃 Leanne Graham

馃懃 Ervin Howell

馃懃 Clementine Bauch

Cargado din谩micamente desde el navegador con useEffect().

⚠️ Ideal para: componentes interactivos, formularios, dashboards o b煤squedas en vivo.

馃搳 Comparativa de m茅todos de fetching

M茅todo Ejecuta en Momento Ventajas Desventajas
getStaticProps Servidor (build) Durante el build R谩pido y cacheado No se actualiza hasta el rebuild
getServerSideProps Servidor En cada request Datos siempre actualizados M谩s lento, depende del servidor
useEffect (fetch) Cliente Despu茅s del render Interactivo, ideal para apps SPA No indexado por buscadores

馃挕 Consejo: puedes combinar estos m茅todos. Por ejemplo, usar getStaticProps para el contenido principal y useEffect para datos que cambian en tiempo real.

Publicar un comentario

0 Comentarios