Luk*_*own 6 reactjs yaml-front-matter graphql gatsby
我正在尝试在我的gatsby-node.js文件中构建一个支持可选值的类型。我认为这已经完成了[String!]!。
gatsby-node.js如何加载我在内部创建的新类型home.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);
};
Run Code Online (Sandbox Code Playgroud)
页面/home/home.js:
export const query = graphql`
query HomeQuery($path: String!) {
markdownRemark(frontmatter: { path: { eq: $path } }) {
html
frontmatter {
features {
title
description
}
}
}
}
`;
Run Code Online (Sandbox Code Playgroud)
主页.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.
---
Run Code Online (Sandbox Code Playgroud)
这需要起作用,以便如果 的front Matterfeatures内home.md的数组为空,那么 GraphQL 就不会抛出错误。
请不要告诉我始终在数组中包含至少一个值,因为这不切实际,我的解决方案不需要支持数组中的任何值。
我花了两个小时浏览文档/问题,试图找到一个可行的解决方案,请有人救救我!
来自GraphQL 文档:
String!意味着该字段不可为 null,这意味着 GraphQL 服务承诺在您查询该字段时始终为您提供一个值。在类型语言中,我们将用感叹号来表示那些。[Episode!]!代表一个对象数组Episode。由于它也是不可为 null 的,因此当您查询字段时,您始终可以期待一个数组(包含零个或多个项目)。而且由于Episode!它也是不可空的,因此您始终可以期望数组的每个项目都是一个Episode对象。
GraphQL 中的感叹号!表示non-nullable,因此[String!]!意味着存在一个非空字符串的非空数组。
如果您希望某个字段是可选的,只需将其保留原样,不带感叹号即可!。例如[String],意味着数组可以为空,或者其中的任何字符串值都可以为空。
我也不确定您是否想要首先使用数组,因为某个功能的titleanddescription肯定应该只是一个字符串?
根据Gatsby 文档,我认为您正在寻找的是这样的:
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
}
`;
Run Code Online (Sandbox Code Playgroud)
这意味着 frontmatter 有一个名为 的字段,features该字段可以为 null(可选),如果存在,则它是一个Feature对象数组。它可以为空,但如果Feature存在任何对象,每个对象Feature都有一个可为空(可选)title和description字段。
| 归档时间: |
|
| 查看次数: |
3501 次 |
| 最近记录: |