У меня обычно есть frontmatter, который будет иметь массив объектов, внутри каждого объекта будет изображение, которое будет ссылаться на строку файла относительно файла уценки.
Проблема в том, что массив может иногда быть пустым, то есть graphql должен будет решить, что такое схема, установив все значения не равными NULL, я смог сделать это с простыми типами, такими как строки, используя createSchemaCustomization
Гэтсби, но я хочу иметь возможность объявите строку, которая ссылается на изображение, чтобы использовать Image Sharp (чтобы gatsby-transformer-sharp мог сжать изображение до того, как компонент его получит).
Это не похоже нигде в документации Gatsby или плагине sharp для изображений что для этого есть тип схемы.
Я пытался использовать File!
в качестве типа, который работает, когда массив пуст, но когда вы на самом деле пытаетесь сослаться на реальные изображения, он просто возвращает { image: childImageSharp: null }
, что означает gatsby-transformer. -Sharp не работает на них, как это происходит, когда File!
не декалируется.
Ниже показано, как моя схема была объявлена:
exports.createSchemaCustomization = ({ actions }) => {
const { createTypes } = actions;
const typeDefs = `
type MarkdownRemark implements Node {
frontmatter: Frontmatter
}
type Frontmatter {
features: [Feature!]!
}
type Feature {
title: String!
description: String!
image: File!
}
`;
createTypes(typeDefs);
};
Это мой запрос graphql:
export const query = graphql`
query HomeQuery($path: String!) {
markdownRemark(frontmatter: { path: { eq: $path } }) {
html
frontmatter {
features {
title
description
image {
childImageSharp {
fluid(maxWidth: 800) {
...GatsbyImageSharpFluid
}
}
}
}
}
}
}
`;
И мой файл уценки, который возвращает массив объектов объектов, image
является строкой, которая должен создать плавный объект с резким изображением.
---
path: '/'
features:
- title: Barns
description: Praesent commodo cursus magna vel scelerisque nisl consectetur et. Nullam id dolor id nibh ultricies vehicula ut id elit.
image: features-001.png
- title: Private Events
description: Praesent commodo cursus magna vel scelerisque nisl consectetur et. Nullam id dolor id nibh ultricies vehicula ut id elit.
image: features-002.png
- title: Food and Drinks
description: Praesent commodo cursus magna vel scelerisque nisl consectetur et. Nullam id dolor id nibh ultricies vehicula ut id elit.
image: features-003.png
- title: Spa
description: Praesent commodo cursus magna vel scelerisque nisl consectetur et. Nullam id dolor id nibh ultricies vehicula ut id elit.
image: features-004.png
---
В качестве обзора, как только я удалю File!
на createSchemaCustomization
, все изображения появятся, но сборка сломается, как только массив пуст.