Я разрабатываю блог с Gatsby.js
Каждый пост представляет собой файл YAML, в котором есть массив для галереи, подобный этому:
gallery:
-'/uploads/image1.jpg'
-'/uploads/image2.jpg'
-'/uploads/image3.jpg'
-'/uploads/image4.jpg'
-'/uploads/image5.jpg'
в посте у меня что-то вроде этого:
const images = data.postData.frontmatter.gallery;
return (
{images.map((image, index) => {
return (
<img src={image}/>
)
}
)};
export const query = graphql`
query PostData($slug: String!) {
postData: markdownRemark(fields: {slug: {eq: $slug}}) {
frontmatter {
gallery
}
}
}
`;
Но изображения не отображаются, поскольку они не обрабатываются и не помещаются в статическую папку во время сборки.
Насколько я понимаю, плагин gatsby-plugin-sharp не преобразует изображения, которые находятся в массиве в файле YAML, но он это делает, когда это всего лишь одно изображение ...
(в некоторых постах есть такое поле
main-image: 'path/to/the/image'
который затем я могу получить с помощью graphql следующим образом:
main-image {
fluid {
src
}
}
}
и вместо этого для массива 'gallery' узел 'Fluid' не создается.)
Я надеюсь, что в этом есть какой-то смысл, я понимаю, что немного запутался в некоторых вещах, я надеюсь, что вы можете помочь мне разобраться в некоторых вещах.
Спасибо,
M
ИЗМЕНИТЬ
Я пошел немного вперед благодаря @Z. Златев.
Я вставляю это в gatsby-node.js:
exports.createSchemaCustomization = ({ actions }) => {
const { createTypes } = actions;
const typeDefs = `
type MarkdownRemark
implements Node {
frontmatter: Frontmatter
}
type Frontmatter {
gallery: [File]
}
`;
createTypes(typeDefs);
};
и теперь узлы создаются для каждого изображения в массиве галереи.
Однако, запрашивая изображения, я получаю null ...
Вот некоторые подробности:
Файл YAML:
---
date: 2019-11-06T13:47:07.000+00:00
title: Cool Project
main_picture: "/uploads/simon-matzinger-Gpck1WkgxIk-unsplash.jpg"
gallery:
- "/uploads/PROEGELHOEF.jpg"
- "/uploads/swapnil-dwivedi-N2IJ31xZ_ks-unsplash-1.jpg"
- "/uploads/swapnil-dwivedi-N2IJ31xZ_ks-unsplash.jpg"
- "/uploads/simon-matzinger-Gpck1WkgxIk-unsplash.jpg"
---
Вот запрос GraphQl:
query MyQuery {
allMarkdownRemark(filter: {id: {eq: "af697225-a842-545a-b5e1-4a4bcb0baf87"}}) {
edges {
node {
frontmatter {
title
gallery {
childImageSharp {
fluid {
src
}
}
}
}
}
}
}
}
Вот ответ с данными:
{
"data": {
"allMarkdownRemark": {
"edges": [
{
"node": {
"frontmatter": {
"title": "Cool Project",
"gallery": [
{
"childImageSharp": null
},
{
"childImageSharp": null
},
{
"childImageSharp": null
},
{
"childImageSharp": null
}
]
}
}
}
]
}
}
}
Я все еще что-то упускаю ...