[英]Allow optional GraphQL data in Gatsby
我正在尝试在我的gatsby-node.js
文件中构建一个支持可选值的类型。 我认为这是用[String!]!
.
如何在gatsby-node.js
上home.js
我在gatsby-node.js
创建的新类型?
gatsby-node.js:
const path = require('path');
exports.createSchemaCustomization = ({ actions }) => {
const { createTypes } = actions;
const typeDefs = `
type markdownRemark implements Node {
frontmatter: Features
}
type Features {
title: [String!]!
description: [String!]!
}
`;
createTypes(typeDefs);
};
页面/主页/home.js:
export const query = graphql`
query HomeQuery($path: String!) {
markdownRemark(frontmatter: { path: { eq: $path } }) {
html
frontmatter {
features {
title
description
}
}
}
}
`;
主页.md:
---
path: "/"
features:
- title: Barns
description: Praesent commodo cursus magna vel scelerisque nisl consectetur et. Nullam id dolor id nibh ultricies vehicula ut id elit.
- title: Private Events
description: Praesent commodo cursus magna vel scelerisque nisl consectetur et. Nullam id dolor id nibh ultricies vehicula ut id elit.
- title: Food and Drinks
description: Praesent commodo cursus magna vel scelerisque nisl consectetur et. Nullam id dolor id nibh ultricies vehicula ut id elit.
- title: Spa
description: Praesent commodo cursus magna vel scelerisque nisl consectetur et. Nullam id dolor id nibh ultricies vehicula ut id elit.
---
这需要起作用,以便如果home.md
的前端内容中的features
数组为空,则 GraphQL 不会抛出错误。
请不要告诉我总是在数组中至少包含一个值,因为这不切实际,我的解决方案需要在我的数组中不支持任何值。
我花了两个小时在圈子里浏览文档/问题试图找到一个可行的解决方案,请有人救我!
来自GraphQL 文档:
String!
表示该字段不可为空,这意味着 GraphQL 服务承诺在您查询该字段时始终为您提供一个值。 在类型语言中,我们将用感叹号表示那些。[Episode!]!
表示一个Episode
对象数组。 由于它也是不可为空的,因此当您查询该字段时,您总是可以期待一个数组(具有零个或多个项目)。 从Episode!
也是不可为空的,您总是可以期望数组的每个项目都是一个Episode
对象。
感叹号!
在 GraphQL 中意味着不可为空,所以[String!]!
意味着有一个非空字符串的非空数组。
如果您希望某个字段是可选的,请保持原样,不带感叹号!
. 例如, [String]
表示该数组可以为空,或者其中的任何字符串值都可以为空。
我也不确定您是否想首先使用数组,因为功能的title
和description
肯定应该只是一个字符串?
根据Gatsby docs ,我认为您要寻找的是:
const typeDefs = `
type markdownRemark implements Node {
// Use custom frontmatter type
frontmatter: Frontmatter
}
// Define custom frontmatter type
type FrontMatter {
// Nullable array of Feature elements
features: [Feature]
}
// Feature has nullable fields title and description
type Feature {
title: String
description: String
}
`;
这意味着 frontmatter 有一个称为features
的字段,该字段可以为 null(可选),并且如果它确实存在,则是一个Feature
对象数组。 它可以为空,但如果存在任何Feature
对象,则每个Feature
都有一个可为空(可选)的title
和description
字段。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.