Я почти могу создавать изображения баннеров Hero с различными макетами в зависимости от того, какие поля заполнены в безголовой CMS / Contentful. Я могу получать данные от конечной точки Contentful и иметь дополнительные поля для заголовков заголовков (значений sting) при предварительном определении типов для них в файле gatsby- node.js, если / когда Gatsby не находит их:
exports.createSchemaCustomization = ({ actions }) => {
const { createTypes } = actions;
const typeDefs = `
type ContentfulHeroBannerSet implements Node {
headerFirstLeft: String
headerFirstCenter: String
headerFirstRight: String
}
`;
createTypes(typeDefs);
};
А затем проверка их существования в компонентах React отображает их, если они существуют:
{item.node.headerRight && (
<>
<Container
item
xs={6}
spacing={3}
className={classes.topContainer}
>
Теперь я добавил еще одно необязательное поле с форматированным текстом и не могу выяснить, как задать для него определение типа заранее и Gatsby не позволяет строить проект, пока он не найдет автоматически или заранее тип для subHeaderLeft. Вот запрос в Index. js:
export const pageQuery = graphql`
query HomeQuery {
site {
siteMetadata {
title
}
}
allContentfulHeroBannerSet(limit: 2) {
edges {
node {
headerLeft
headerCenter
headerRight //So far so good
subHeaderLeft { // Here comes the problem
childMarkdownRemark {
html
}
}
ОШИБКА: Произошла ошибка в вашем запросе GraphQL: Невозможно запросить поле "childMarkdownRemark" для типа. Рекомендуется явно введите вашу схему GraphQL, если вы хотите использовать дополнительные поля. Таким образом, вам не нужно добавлять упомянутый «фиктивный контент». Посетите наши документы, чтобы узнать, как определить схему для «contentfulHeroBannerSetSubHeaderSecondLeftRichTextNode»: https://www.gatsbyjs.org/docs/schema-customization/#creating -type-определений .
Попытался также прочитать эту страницу документации, но все еще застрял. Пустой контент не подходит, так как идея состоит в том, чтобы иметь дополнительные поля для редакторов контента. Есть идеи?