Primeiro de tudo vc deve configurar os filesystems do seu projeto através do gatsby-source-filesystem é uma boa nomear de acordo com a necessidade
- usar gatsby-image
- instale as dependencias
- ele cria um component que otimiza tudo, alem de renderizar imagens mais leves conforme for carregando (vc tem como escolher o tipo atraves dos fragments que ele possui)
- usar o gatsby-plugin-react-svg basicamente vc diz qual pasta/arquivos ele vai observar e vc importa diretamente sem problemas (tambem pode usar o static query)
- Caso seja png/jpeg/... usar o gatsby-background-image ele vai facilitar muito a sua vida nessa questao, pois usa a mesma configuração do gatsby-image (instale as dependencias)
- Caso seja um svg vc pode usar diretamente o plugin gatsby-plugin-react-svg ele funciona no css ... mas e uma boa pegar a url correta pra isso vc pode usar static query
// hook para pegar as imagens do tipo fluid de acordo com o nome
// pode ser usado com fixed dentre outros
// e a unica forma ate o momento de nao precisar fazer uma query pra cada item
import { graphql, useStaticQuery } from 'gatsby';
import { filter, includes } from 'lodash';
export const useImagesFluid = ({ names }) => {
const {
allImageSharp: { edges = [] },
} = useStaticQuery(graphql`
{
allImageSharp {
edges {
node {
fluid {
...GatsbyImageSharpFluid_tracedSVG
originalName
}
}
}
}
}
`);
return filter(edges, ({ node }) => includes(names, node.fluid.originalName));
};
export default {
useImagesFluid,
};
usamos file quando queremos percorrer todo tipo de arquivo e imageSharp quando forem imagens ;)
{
file(name: { in: "name" }) {
publicURL
}
}
O gatsby-image tem um fragment referente ao webp, então isso facilita muito a vida. Lembrando que o webp não é aceito em todos os browsers... "ah então não devo usar?" ... pode usar ... ele tem um fallback (thanks god)
Como usar:
(basta substituir o fragment ;) )
import { graphql, useStaticQuery } from 'gatsby';
import { filter, includes } from 'lodash';
export const useImagesFluid = ({ names }) => {
const {
allImageSharp: { edges = [] },
} = useStaticQuery(graphql`
{
allImageSharp {
edges {
node {
fluid {
...GatsbyImageSharpFixed_withWebp
originalName
}
}
}
}
}
`);
return filter(edges, ({ node }) => includes(names, node.fluid.originalName));
};
export default {
useImagesFluid,
};