En la lección anterior creaste un componente Card y lo usaste tres veces. Pero las tres tarjetas mostraban exactamente el mismo contenido. En la práctica querrás algo así:
Lo que pasa entre las etiquetas (title="...") son props: datos que el componente recibe para personalizar su render.
Astro expone las props en Astro.props. Lo idiomático es destructurarlas:
Astro.props siempre está disponible dentro de cualquier componente .astro.
Astro está pensado para TypeScript de fábrica. La convención es declarar una interface Props en el frontmatter — Astro la detecta automáticamente y comprueba los tipos en el sitio donde uses el componente.
Con esto:
title, TypeScript se queja.body, TypeScript se queja.<Card.Marca opcionales con ? y dales valor por defecto en la destructuración:
Las llaves {} también funcionan al pasar props. Eso te permite enviar números, booleanos, arrays, objetos, funciones...
...restA veces solo te interesa una prop concreta y quieres dejar pasar todas las demás al elemento que renderizas:
Ahora puedes hacer <Button onclick="...">Ok</Button> y el onclick viaja hasta el <button> real.
Tienes dos archivos:
src/components/Card.astrosrc/pages/index.astro (que ya importa Card)En Card.astro:
interface Props { title: string; body: string } en el frontmatter.const { title, body } = Astro.props.{title} dentro del <h2> y {body} dentro del <p>.En index.astro:
title y body. Por ejemplo:
Si TypeScript se queja al pasar las props, lee el mensaje: te está diciendo que el contrato no cuadra.