如何通过 gatsby-source-sanity 在 sanity.io 和 gatsby 中使用内部链接?

Posted

技术标签:

【中文标题】如何通过 gatsby-source-sanity 在 sanity.io 和 gatsby 中使用内部链接?【英文标题】:How to use internal links in sanity.io and gatsby with gatsby-source-sanity? 【发布时间】:2020-06-27 10:58:42 【问题描述】:

我按照健全性文档创建了一个 internalLink 类型,并且根据关于将 internalLinks 与 graphql api 一起使用的问题说明,我将它创建为一个单独的类型,如下所示:

export default 
    name: 'internalLink',
    type: 'object',
    title: 'Internal link',
    fields: [
      
        name: 'reference',
        type: 'reference',
        title: 'Reference',
        to: [
           type: 'helpTopic' ,
          // other types you may want to link to
        ]
      
    ]
  

我已经添加了 schema.js 如下:

import internalLink from './internalLink'

export default createSchema(
  name: 'default',
  types: schemaTypes.concat([
    internalLink,
    helpTopic,
    blockContent,
    figure,
    slideshow,
  ])
)

并将其添加到注释中,如下所示:

annotations: [
          
            type: 'internalLink'
          
        ]

当我在 Gatsby 中使用 graphiql 时,如果我不使用 resolveReferences,那么我会正确获取未解析的引用:

"markDefs": [
                
                  "_key": "00a07e239d3d",
                  "_type": "internalLink",
                  "reference": 
                    "_ref": "7c635eee-0d98-5335-a376-4101922ca4b7",
                    "_type": "reference"
                  
                
              ]

但是,当我使用 _rawBody(resolveReferences:maxDepth:1000) 时,引用没有得到解析并返回为 null:

"markDefs": [
                
                  "_key": "00a07e239d3d",
                  "_type": "internalLink",
                  "reference": null
                
              ]

这是一个错误还是我做错了什么。我尝试过浏览文档,但无法弄清楚这一点,并且示例 gatsby sanity 组合项目没有 internalLinks 示例。

提前感谢您的帮助。

【问题讨论】:

您是否在更改架构后部署了 GraphQL 端点?每次更改架构时都必须运行sanity graphql deploy。可能有一些不匹配导致它变成null。只是想在深入研究之前确保这一点。 是的,我确实运行了sanity graphql deploy,并且我还在操场上检查了它确实具有具有正确 ID 的引用属性。似乎只是解决引用给了我错误。感谢您的回复,希望您能就可能的错误提供任何见解。 嘿,你找到方法了吗? 我在 github 页面上发布了一个关于 gatsby-source-sanity 的问题,他们已经回复了关于 beta 版本中的潜在修复 (github.com/sanity-io/gatsby-source-sanity/issues/60)。我一直忙于其他项目,所以还没有机会检查,但请尝试gatsby-source-sanity@6.0.0-beta.0,如果对您很重要,请向他们提供反馈 【参考方案1】:

到目前为止,注释不能接受这样的模式类型。您必须将整个模式块放在那里。有点奇怪的限制。我认为有人已经在 Sanity.io 的 Github 存储库上提出了有关此问题的票证/功能请​​求。

【讨论】:

谢谢莎伦。但是,实际上我首先是这样做的——将整个模式块作为匿名类型放在注释中。虽然有同样的问题。然后我在 sanity docs (sanity.io/docs/configuration) 中点击了这个链接,并使用上面显示的模式类型进行了尝试。来自文档的注释:“如果您计划使用 Sanity 的 GraphQL API,您应该将 internalLink 提升为模式类型,并使用 type: 'internalLink' 作为注释而不是上面示例中的匿名对象。”

以上是关于如何通过 gatsby-source-sanity 在 sanity.io 和 gatsby 中使用内部链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何理解“不要通过共享内存来通信,而应该通过通信来共享内存”?

如何通过android上的ADB命令通过pc拨打电话?

如何通过 DBLINK 通过 DBLINK 调用 SELECT?

如何使用jquery通过.load通过跨域获取HTML元素的值

如何通过 Windows Azure 通过 GCM 通过唯一 ID 发送特定 Android 设备的通知?

如何通过方法(不是api)通过identityserver4获取访问令牌?