13 - 馃挰 Layouts y p谩ginas din谩micas en Next.js
Aprende c贸mo estructurar tu aplicaci贸n con layouts reutilizables y c贸mo crear rutas din谩micas usando corchetes.
Veremos ejemplos pr谩cticos con _app.js, getStaticPaths y getStaticProps.
馃П ¿Qu茅 es un layout?
Un layout es una estructura visual que se reutiliza en varias p谩ginas. Por ejemplo: cabecera, men煤 lateral, pie de p谩gina, etc.
Puedes definir un layout global en _app.js o layouts por p谩gina.
// pages/_app.js
import Layout from '../components/Layout';
export default function MyApp({ Component, pageProps }) {
return (
<Layout>
<Component {...pageProps} />
</Layout>
);
}
Y el componente Layout podr铆a verse as铆:
// components/Layout.js
export default function Layout({ children }) {
return (
<div>
<header>馃寪 Mi sitio Next.js</header>
<main>{children}</main>
<footer>© 2025 Todos los derechos reservados</footer>
</div>
);
}
馃攧 ¿Qu茅 son las p谩ginas din谩micas?
Las p谩ginas din谩micas permiten crear rutas basadas en datos.
Por ejemplo: /productos/1, /productos/2, etc.
Se crean usando corchetes en el nombre del archivo: [id].js
// pages/productos/[id].js
export async function getStaticPaths() {
const res = await fetch('https://fakestoreapi.com/products');
const productos = await res.json();
const paths = productos.map(prod => ({
params: { id: prod.id.toString() },
}));
return { paths, fallback: false };
}
export async function getStaticProps({ params }) {
const res = await fetch(`https://fakestoreapi.com/products/${params.id}`);
const producto = await res.json();
return { props: { producto } };
}
export default function Producto({ producto }) {
return (
<div className="p-4">
<h1 className="text-2xl font-bold mb-3">馃泹️ {producto.title}</h1>
<p>馃挷{producto.price}</p>
<p>{producto.description}</p>
</div>
);
}
馃З Resultado visual:
馃泹️ Producto: Camiseta de algod贸n
馃挷Precio: 19.99
馃搫 Descripci贸n: Camiseta suave y c贸moda para uso diario.
Ruta din谩mica generada con [id].js
getStaticPaths para generar rutas din谩micas en el build y getStaticProps para pasar los datos.
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias