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.
/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.
⚙️ 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.
馃椇️ 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.
馃搳 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 |
generateStaticParams y fetch cache o revalidate.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias