Importe imagens dinamicamente
Imagens locais devem ser importadas em arquivos .astro
para serem exibidas. Em algumas situações, pode ser necessário ou desejado importar dinamicamente os caminhos das imagens em vez de importar cada imagem individualmente.
Nesta receita, você aprenderá como importar imagens dinamicamente usando a função import.meta.glob
do Vite. Você criará um componente de cartão que exibe o nome, idade e foto de uma pessoa.
Receita
Seção intitulada Receita-
Crie uma nova pasta
assets
dentro do diretóriosrc
e adicione suas imagens dentro dessa nova pasta.Directorysrc/
Directoryassets/
- avatar-1.jpg
- avatar-2.png
- avatar-3.jpeg
assets
é uma convenção de nome de pasta popular para colocar imagens, mas você pode nomear a pasta como quiser. -
Crie um novo componente Astro para o cartão e importe o componente
<Image />
. -
Especifique as
props
que o componente receberá para exibir as informações necessárias em cada cartão. Opcionalmente, você pode definir seus tipos se estiver usando TypeScript em seu projeto. -
Crie uma nova variável
images
e use a funçãoimport.meta.glob
que retorna um objeto com todos os caminhos de imagens dentro da pastaassets
. Você também precisará importar o tipoImageMetadata
para ajudar a definir o tipo da variávelimages
. -
Use as props para criar a marcação do seu componente de cartão.
-
No atributo
src
, passe o objetoimages
e use notação de colchetes para o caminho da imagem. Certifique-se de invocar a função glob.Como você está acessando o objeto
images
que possui um tipo desconhecido, é recomendado lançar (throw
) um erro caso um caminho de arquivo inválido seja passado como prop.images
é um objeto que contém todos os caminhos de imagens dentro da pastaassets
.A propriedade
imagePath
é uma string que contém o caminho da imagem que você quer exibir. Oimport.meta.glob()
faz o trabalho de encontrar o caminho da imagem que corresponde à propimagePath
e realiza a importação para você. -
Importe e use o componente do cartão em uma página Astro, passando os valores para as
props
.