Construye tu primer plantilla
Prepárate para...
- Refactorizar elementos comunes en un diseño de página
- Utilizar el elemento
<slot />de Astro para colocar el contenido de la página dentro de una plantilla - Pasar valores específicos de la página como props a tu plantilla
Todavía tienes algunos componentes de Astro repetidamente renderizados en cada página. ¡Es hora de refactorizar para crear una plantilla de página compartido!
Crea tu primer componente plantilla
-
Crea un nuevo archivo en la ubicación
src/layouts/BaseLayout.astro. (Tendrás que crear primero una nueva carpetalayouts). -
Copia el contenido completo de
index.astroen tu nuevo archivo,BaseLayout.astro.src/layouts/BaseLayout.astro ---import Header from '../components/Header.astro';import Footer from '../components/Footer.astro';import '../styles/global.css';const pageTitle = "Página de inicio";---<html lang="es"><head><meta charset="utf-8" /><link rel="icon" type="image/svg+xml" href="/favicon.svg" /><meta name="viewport" content="width=device-width" /><meta name="generator" content={Astro.generator} /><title>{pageTitle}</title></head><body><Header /><h1>{pageTitle}</h1><Footer /><script>import "../scripts/menu.js";</script></body></html>
Utiliza tu plantilla en una página
-
Sustituye el código en
src/pages/index.astropor el siguiente:src/pages/index.astro ---import BaseLayout from '../layouts/BaseLayout.astro';const pageTitle = "Página de inicio";---<BaseLayout><h2>Mi impresionante subtítulo del blog</h2></BaseLayout> -
Comprueba de nuevo la vista previa del navegador para ver qué ha cambiado (o, alerta de spoiler: ¡no ha cambiado!).
-
Añade un elemento
<slot />asrc/layouts/BaseLayout.astrojusto encima del componente de pie de página y, a continuación, comprueba la vista previa del navegador de tu página de inicio y observa lo que realmente ha cambiado esta vez.src/layouts/BaseLayout.astro ---import Header from '../components/Header.astro';import Footer from '../components/Footer.astro';import '../styles/global.css';const pageTitle = "Página de inicio";---<html lang="es"><head><meta charset="utf-8" /><link rel="icon" type="image/svg+xml" href="/favicon.svg" /><meta name="viewport" content="width=device-width" /><meta name="generator" content={Astro.generator} /><title>{pageTitle}</title></head><body><Header /><h1>{pageTitle}</h1><slot /><Footer /><script>import "../scripts/menu.js";</script></body></html>
La etiqueta <slot /> permite inyectar (o “introducir”) contenido hijo escrito entre las etiquetas de apertura y cierre <Component></Component> en cualquier archivo Component.astro.
Pasa valores específicos de la página como props
-
Pasa el título de la página a tu componente plantilla desde
index.astroutilizando un atributo de componente:src/pages/index.astro ---import BaseLayout from '../layouts/BaseLayout.astro';const pageTitle = "Página de inicio";---<BaseLayout pageTitle={pageTitle}><h2>Mi impresionante subtítulo del blog</h2></BaseLayout> -
Cambia el script de tu componente plantilla
BaseLayout.astropara recibir un título de página a través deAstro.propsen lugar de definirlo como una constante.src/layouts/BaseLayout.astro ---import Header from '../components/Header.astro';import Footer from '../components/Footer.astro';import '../styles/global.css';const pageTitle = "Página de inicio";const { pageTitle } = Astro.props;--- -
Comprueba la vista previa de tu navegador para verificar que el título de tu página no ha cambiado. Tiene el mismo valor, pero ahora se muestra dinámicamente. Y ahora, en cada página individual puedes especificar tu propio título en la plantilla.
Pruébalo tu mismo - Utiliza tu plantilla en todas partes
Refactoriza tus otras páginas (blog.astro y about.astro) para que utilicen tu nuevo componente <BaseLayout> para renderizar los elementos comunes de la página.
No lo olvides:
-
Pasar un título de página como props a través de un atributo de componente.
-
Deja que la plantilla se encargue de la representación HTML de los elementos comunes.
-
Eliminar cualquier cosa de cada página que esa página ya no es responsable de la representación, ya que está siendo manejado por la plantilla, incluyendo:
- Elementos HTML
- Componentes y tus importaciones
- Reglas CSS en una etiqueta
<style>(por ejemplo,<h1>en tu página ‘Acerca de’). - Etiquetas
<script>.
Pon a prueba tus conocimientos
-
Un componente de Astro (archivo
.astro) puede funcionar como una: -
Para mostrar un título de página en la página, puedes:
-
La información puede pasar de un componente a otro mediante: