馃 getStaticProps, getServerSideProps y getStaticPaths

Next.js getStaticProps getServerSideProps getStaticPaths

09 - 馃 getStaticProps, getServerSideProps y getStaticPaths

Next.js ofrece funciones especiales para controlar c贸mo se obtienen los datos antes de renderizar las p谩ginas. En esta lecci贸n aprender谩s c贸mo y cu谩ndo usar getStaticProps, getServerSideProps y getStaticPaths.


馃摌 Concepto general

Estas tres funciones permiten obtener datos antes de que la p谩gina sea renderizada. Dependiendo del tipo de renderizado que uses (SSG o SSR), se ejecutar谩n en el build o en cada petici贸n al servidor.

馃挕 Todas estas funciones solo pueden usarse en archivos dentro de /pages (no en /app).

馃摝 getStaticProps — Generaci贸n Est谩tica (SSG)

getStaticProps se ejecuta en el momento de compilaci贸n (build time), y permite generar p谩ginas est谩ticas con datos obtenidos de una API o base de datos.

// pages/blog.js
export async function getStaticProps() {
  const res = await fetch('https://jsonplaceholder.typicode.com/posts?_limit=3');
  const posts = await res.json();

  return {
    props: { posts }, // los datos se env铆an como props al componente
  };
}

export default function Blog({ posts }) {
  return (
    <div className="p-4">
      <h1 className="text-2xl font-bold mb-3">Blog (SSG)</h1>
      {posts.map(p => (
        <article key={p.id} className="border-b pb-2 mb-2">
          <h2>{p.title}</h2>
        </article>
      ))}
    </div>
  );
}
      

馃З Resultado visual:

馃摑 Publicaci贸n 1
馃摑 Publicaci贸n 2
馃摑 Publicaci贸n 3

Generado durante el build, no se actualiza autom谩ticamente.

✅ Ideal para: contenido est谩tico, blogs o landing pages.

⚙️ getServerSideProps — Renderizado en el Servidor (SSR)

getServerSideProps se ejecuta en cada solicitud al servidor. Esto permite obtener datos actualizados en tiempo real, aunque puede aumentar el tiempo de respuesta.

// pages/usuarios.js
export async function getServerSideProps() {
  const res = await fetch('https://jsonplaceholder.typicode.com/users');
  const users = await res.json();

  return {
    props: { users },
  };
}

export default function Usuarios({ users }) {
  return (
    <div className="p-4">
      <h1 className="text-2xl font-bold mb-3">Usuarios (SSR)</h1>
      {users.map(u => (
        <p key={u.id}>馃懁 {u.name}</p>
      ))}
    </div>
  );
}
      

馃З Resultado visual:

馃懁 Leanne Graham

馃懁 Ervin Howell

馃懁 Clementine Bauch

Los datos se actualizan en cada solicitud al servidor.

馃挕 Ideal para: paneles de administraci贸n, datos que cambian frecuentemente o usuarios autenticados.

馃椇️ getStaticPaths — Generaci贸n de rutas din谩micas (SSG)

Cuando tienes p谩ginas din谩micas (por ejemplo /blog/[id]), debes usar getStaticPaths junto con getStaticProps para indicar qu茅 rutas se generan durante el build.

// pages/blog/[id].js
export async function getStaticPaths() {
  const res = await fetch('https://jsonplaceholder.typicode.com/posts?_limit=3');
  const posts = await res.json();

  const paths = posts.map(p => ({
    params: { id: p.id.toString() },
  }));

  return {
    paths,
    fallback: false, // si es false, cualquier ruta no listada mostrar谩 404
  };
}

export async function getStaticProps({ params }) {
  const res = await fetch(`https://jsonplaceholder.typicode.com/posts/${params.id}`);
  const post = await res.json();

  return {
    props: { post },
  };
}

export default function Post({ post }) {
  return (
    <article className="p-4">
      <h1 className="text-2xl font-bold mb-3">{post.title}</h1>
      <p>{post.body}</p>
    </article>
  );
}
      

馃З Resultado visual:

T铆tulo del post

Contenido del post generado est谩ticamente.

Cada ruta din谩mica se crea durante el build.

⚙️ Ideal para: blogs con muchas rutas din谩micas, productos, perfiles, etc.

馃搳 Comparativa r谩pida

Funci贸n Tipo de renderizado Momento de ejecuci贸n Uso recomendado
getStaticProps SSG En el build Datos est谩ticos
getServerSideProps SSR En cada solicitud Datos din谩micos o autenticados
getStaticPaths SSG (din谩mico) En el build Generar rutas din谩micas

馃挕 Consejo: si trabajas con App Router (Next.js 13+), estas funciones se reemplazan por las nuevas propiedades como generateStaticParams y fetch cache o revalidate.

Publicar un comentario

0 Comentarios