Contenido del curso

Componente Layout para todas las vistas

Resumen

Reutilizar estructura visual entre páginas es uno de los retos más comunes al construir una aplicación con React. Crear un componente layout te permite encapsular estilos compartidos como márgenes, centrado y espaciado para que todas tus vistas se vean consistentes sin repetir código.

¿Qué es un componente layout en React y para qué sirve?

Un layout funciona como un contenedor padre que envuelve cada página de tu aplicación: Home, My Account, My Orders, Sign In y Not Found. En lugar de copiar el mismo div con los mismos estilos en cada vista, defines una sola vez la estructura visual base y reutilizas ese wrapper en todos lados.

¿Por qué usar un layout en lugar de repetir estilos? Porque si después necesitas ajustar un margen o centrar el contenido, lo cambias en un solo archivo y se actualiza en todas las páginas. Evitas inconsistencias y reduces el estrés del mantenimiento.

La idea central es separar la responsabilidad: el layout se encarga del marco visual común, y cada página se concentra en su contenido específico.

¿Cómo se construye el componente layout paso a paso?

Dentro de la carpeta components se crea una nueva carpeta llamada layout con su archivo index.jsx. La estructura sigue el mismo patrón que cualquier otro componente funcional en React: una arrow function que retorna JSX y un export default al final.

¿Qué estilos lleva el wrapper principal?

Dentro del componente se coloca un div con clases de Tailwind que definen el comportamiento visual compartido. En el ejemplo de la clase se usaron:

  • flex para activar flexbox.
  • flex-col para que los elementos hijos se acomoden en columna.
  • items-center para centrar horizontalmente el contenido.
  • mt-20 para dar un margen superior y evitar que el contenido se tape con el navbar.

Ese mt-20 es clave: sin él, las páginas quedarían pegadas al navbar fijo y se ocultaría parte del contenido.

¿Cómo recibe el layout el contenido de cada página?

Aquí entra el concepto de children, una prop especial de React que representa cualquier elemento JSX que se coloque entre las etiquetas de apertura y cierre de un componente.

jsx const Layout = ({ children }) => { return ( <div className='flex flex-col items-center mt-20'> {children} </div> ) }

export default Layout

¿Qué es children en React? Es una prop automática que contiene todo lo que escribas dentro del componente al usarlo. Permite que un componente funcione como contenedor genérico de otros elementos.

Al declarar { children } en los parámetros y renderizarlo dentro del div, el layout se convierte en un encapsulador capaz de envolver cualquier vista.

¿Cómo se aplica el layout en cada página de la aplicación?

En cada vista, basta con importar el componente y reemplazar el div raíz por el Layout. La importación se hace con una ruta relativa hacia components/layout.

jsx import Layout from '../../components/Layout'

const Home = () => { return ( <Layout> {/* contenido específico de Home */} </Layout> ) }

Este mismo patrón se replica en My Account, My Orders, Sign In y Not Found. Aunque puede sentirse mecánico repetir el import y el reemplazo, la recompensa es enorme: todas las vistas heredan el mismo margen superior y la misma estructura sin esfuerzo adicional.

¿Por qué dejar items-center pero no justify-center?

Una decisión interesante de diseño fue mantener solo items-center para el centrado horizontal y dejar el comportamiento vertical libre. Esto le da a cada página flexibilidad: si en el futuro alguna vista necesita alinear su contenido de manera distinta, no tiene que pelear contra estilos forzados desde el layout.

¿Cuándo conviene poner estilos en el layout y cuándo en la página? Pon en el layout solo lo que sea verdaderamente común a todas las vistas, como márgenes contra el navbar. Deja en cada página los estilos que dependen de su contenido único.

¿Qué detalle del navbar hay que ajustar para que el layout funcione bien?

Durante la implementación apareció un detalle visual: el navbar no estaba pegado al borde superior del viewport. La solución fue añadir top-0 al contenedor del navbar para fijarlo correctamente arriba. Sin este ajuste, el mt-20 del layout no produce el efecto esperado y el contenido sigue viéndose desalineado.

Este tipo de pequeñas correcciones son normales cuando combinas componentes que dependen unos de otros. El navbar posicionado de forma fija y el layout con margen superior trabajan juntos para que ninguna página quede oculta detrás de la barra de navegación.

Con esta base ya tienes un proyecto con dos piezas estructurales sólidas: un navbar reutilizable y un layout que da consistencia visual a todas las vistas. Cuéntame en los comentarios cómo te fue replicando esta estructura y qué decisiones de estilo tomaste para tu propia aplicación.