gpt4 book ai didi

graphql - 我应该如何使用 Apollo Client 和 Link Rest 查询和匹配来自 GraphQL 中相同响应的数据?

转载 作者:行者123 更新时间:2023-12-04 16:03:42 25 4
gpt4 key购买 nike

我有以下查询:

const getPage = gql`
query Page($path: String!) {
page(path: $path) @rest(type: "Page", path: "{args.path}") {
blocks @type(name: Block) {
name
posts @type(name: Post) {
body
author
}
}
authors @type(name: Author) {
name
}
}
}


blocks.posts.author只有一个 AuthorId . author 对象包含所有可用的作者。

我想替换/匹配 AuthorId与其对应的对象。是否可以在一个查询中执行此操作?

我也不介意仅对 Author 进行单独的查询(fetch 将被缓存,不会发出新请求),但我仍然不知道如何通过 2 个查询匹配它。

示例 API 响应
{
blocks: [
{
posts: [
{
id: 1,
title: 'My post',
author: 12,
}
]
}
],
authors: [
{
id: 12,
name: 'John Doe'
}
]
}

我想要的 1 个查询是 author里面 post成为完整的作者对象。

最佳答案

很好的问题。使用 GraphQL,您可以扩展任何字段并从中选择您想要的确切子字段,因此如果您也在后端使用 GraphQL,这将不是问题。您可以在此处执行一些解决方法:

如果所有 Author 对象都在您的 Apollo 缓存中并且您可以访问每个 Author 的 id,您可以使用 ApolloClient.readFragment访问其他属性,如下所示:

const authorId = ...; // the id of the author

const authorInfo = client.readFragment({
id: authorId,
fragment: gql`
fragment AuthorInfo on Author {
id
name
# anything else you want here
}
`,
});

尽管值得注意的是,对于问题中的原始查询,如果您将所有 Author 对象作为查询的属性,则可以仅使用 Javascript 操作从 Author id 转到对象。
const authorId = ...; // the id of the author
data.page.authors.find(author => author.id === authorId);

关于graphql - 我应该如何使用 Apollo Client 和 Link Rest 查询和匹配来自 GraphQL 中相同响应的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57164870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com