如果我有Post { id, title, createdAt, content }
的列表,我将如何在单个查询中获取上一个和下一个?
我试过了
allPosts(
first: 1,
after: "cje4d8odwwqvz0155c4zs2n7i"
last: 1,
before: "cje4d8odwwqvz0155c4zs2n7i"
) {
id
title
}
但是根据文档,不允许在之前和之后组合。我正在尝试获取导航箭头的指针,允许用户移动到上一个或下一个帖子。
答案 0 :(得分:0)
事实证明,GraphQL aliases允许在同一查询中运行不同的查询。
使用GraphCMS生成的API,我使用Apollo-Client以这种方式实现了从其邻居返回完整帖子和部分数据的查询。
export const GET_POST_AND_EDGES_QUERY = gql`
query GetPostQuery($strId: String!, $id: ID!) {
Previous: allPosts (last: 1, before: $strId){
...PostFragment
}
Post(id: $id) {
author {
firstName
lastName
thumbnail {
url
}
}
title
createdAt
tags
content
}
Next: allPosts(first: 1, after: $strId) {
...PostFragment
}
}
fragment PostFragment on Post {
title
slug
id
}
`;
我传递与String
类型相同的ID并输入ID
的原因是生成的API在使用before
和after
时需要String类型Post()查询需要ID
类型。如果您可以控制架构,我想这可以更改,以便函数签名接受相同的类型。
我不确定before
和after
是否接受除了类似ID
之外的其他字符串类型。