Construa seu primeiro layout
Get ready to…
- Refatorar elementos comuns em um layout de página
- Utilizar um elemento
<slot />
do Astro para colocar conteúdos da página em um layout - Passar valores específicos da página como props para seu layout
Você ainda tem alguns componentes Astro repetidamente renderizados em cada página. É hora de refatorar novamente para criar um layout de página compartilhado!
Crie seu primeiro componente de layout
Seção intitulada Crie seu primeiro componente de layout-
Crie um novo arquivo em
src/layouts/BaseLayout.astro
. (Você precisará criar uma nova pastalayouts
primeiro.) -
Copie todo o conteúdo de
index.astro
para seu novo arquivo,BaseLayout.astro
.
Utilize seu layout em uma página
Seção intitulada Utilize seu layout em uma página-
Substitua o código em
src/pages/index.astro
com o seguinte: -
Verifique a pré-visualização do navegador novamente para observar o que (ou, alerta de spoiler: não!) mudou.
-
Adicione um elemento
<slot />
aosrc/layouts/BaseLayout.astro
acima do componente de rodapé, e então verifique a pré-visualização do navegador de sua página de Início e observe o que de fato realmente mudou desta vez!
O <slot />
permite que você injete (ou “encaixe”) conteúdo filho escrito entre as tags de abertura e fechamento <Componente></Componente>
em qualquer arquivo Componente.astro
.
Passe valores específicos da página como props
Seção intitulada Passe valores específicos da página como props-
Passe o título da página para seu componente de layout de
index.astro
utilizando um atributo do componente: -
Modifique o script do seu componente de layout
BaseLayout.astro
para receber um título da página através deAstro.props
em vez de definí-lo como uma constante. -
Confira a pré-visualização no navegador para verificar que o título da página não mudou. Ele tem o mesmo valor, mas agora está sendo apresentado dinamicamente. E agora, cada página individual poderá especificar seu próprio título para o layout.
Tente você mesmo - Utilize seu layout em todo lugar
Seção intitulada Tente você mesmo - Utilize seu layout em todo lugarRefatore suas outras páginas (blog.astro
e about.astro
) para que elas utilizem seu novo componente <BaseLayout>
para mostrar elementos comuns da página.
Não se esqueça de:
-
Passar o título da página como props via atributo do componente.
-
Deixar o layout como responsável pela apresentação HTML de quaisquer elementos comuns.
-
Mover quaisquer tags
<style>
do<head>
da página com estilos que você quer manter para o modelo de página HTML. -
Excluir qualquer coisa de cada página individual que agora é manipulada pelo layout, incluindo:
- Elementos HTML
- Componentes e suas importações
- Regras CSS em uma tag
<style>
(como<h1>
na sua página Sobre) - Tags
<script>
Usar o <BaseLayout>
para mostrar sua página about.astro
significa que você perderá a tag <style>
adicionada ao <head>
dessa página. Para continuar a estilizar itens somente no nível da página usando o estilo escopado do Astro, mova a tag <style>
para o corpo do componente de página. Isso permite que você estilize elementos criados neste componente de página (como uma lista de suas habilidades).
Como agora seu <h1>
é criado pelo seu componente de layout, você pode adicionar o atributo is:global
em sua tag de estilo para afetar todos os elementos dessa página, incluindo aqueles criados por outros componentes: <style is:global define:vars={{ skillColor, fontWeight, textCase }}>
Teste seu conhecimento
Seção intitulada Teste seu conhecimento-
Um componente Astro (arquivo
.astro
) pode funcionar como: -
Para mostrar o título de uma página na página, você pode:
-
Informação pode ser passada de um componente para outro ao: