如何将 JSON 字段添加到 Gatsby sourceNode?

Posted

技术标签:

【中文标题】如何将 JSON 字段添加到 Gatsby sourceNode?【英文标题】:How to add JSON field to Gatsby sourceNode? 【发布时间】:2020-08-15 20:26:32 【问题描述】:

在我的 API 中,我有带有动态模式的 layout 属性,所以我将其添加到 sourceNode 作为字符串化 JSON:

  for (const  path  of nodesList) 
    /* ... */

    const node = 
      id: createNodeId(`cms-$cmsNode.id`),
      /* this prop */
      layout: JSON.stringify(layout),
      parent: null,
      children: [],
      internal: 
        content: JSON.stringify(cmsNode),
        type: 'CmsNode',
      ,
    
    node.internal.contentDigest = createContentDigest(node)
    createNode(node)
  

如何自定义此字段以在查询级别解析 JSON,而不是页面组件中的 JSON.parse

【问题讨论】:

使用 graphql 自定义 json 类型(文档)...不要字符串化 【参考方案1】:

我应该添加自定义类型:

exports.createSchemaCustomization = ( actions ) => 
  const  createTypes  = actions
  const typeDefs = `
    type CmsNode implements Node @dontInfer 
      id: ID!
      parent: Node
      children: [Node!]!
      ...
      layout: JSON
    
  `
  createTypes(typeDefs)

createNode 期间不要对这个道具进行字符串化。

【讨论】:

以上是关于如何将 JSON 字段添加到 Gatsby sourceNode?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Gatsby 中根据其他字段删除 GraphQL 字段?

如何使用图像组件将图像动态添加到 Gatsby 中的页面?

如何通过与模型比较将特定的缺失字段添加到 json 对象

无法将远程文件节点添加到父节点 Gatsby

来自 json 的 Gatsby 图像路径

将中型文章导入 gatsby