如何在 Sanity.io 的 inputComponent 中检索引用的字段数据?

Posted

技术标签:

【中文标题】如何在 Sanity.io 的 inputComponent 中检索引用的字段数据?【英文标题】:How to retrieve a referenced field data inside inputComponent in Sanity.io? 【发布时间】:2019-08-21 01:50:47 【问题描述】:

在 Sanity Studio 中,我试图在输入组件中获取所有 Document 的属性。按照这篇文章An officially supported way to get at the document content 我可以使用 withDocument HOC 来获取文档数据,但是其中一些具有“引用”类型,因此我只能获取 _ref 和 _type 而不是整个对象。我怎样才能做到?

【问题讨论】:

【参考方案1】:

您可以使用取消引用运算符 -> 取消引用这些值。因此,假设您有一个名为 book 的文档,其属性 authors 是一组引用类型。

您可以通过这种方式获取作者数组的值:

const books = await client.fetch(
`*[_type == "book"] 
   ...,
   authors[]->
 `
)

您可以在 GROQ 查询中查看Sanity's docs 以获取更多更好的信息。

【讨论】:

【参考方案2】:

我已经通过使用 Sanity Client 解决了这个问题。

在您的组件中导入客户端:

import client from 'part:@sanity/base/client';

开始使用 _ref 作为 GROQ 查询中的 _id 进行查询

...
componentDidMount = () => 
    client.fetch(`*[_type == "template" && _id == "<put _ref value here>"]
      title,
      body
    `).then(response => 
      console.info('RESPONSE', response);
    )
  

【讨论】:

以上是关于如何在 Sanity.io 的 inputComponent 中检索引用的字段数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何将 CSV 导入 sanity.io

如何在 Sanity.io 的 inputComponent 中检索引用的字段数据?

如何将多张图片上传到 sanity.io?

如何在 sanity.io 中为文档创建默认的“creationDate”?

如何定义 NOT 是 sanity.io 结构构建器?

在 sanity.io 中自定义模式字段