获取给定对象的边缘

时间:2018-02-26 16:04:09

标签: graphql

如果我有Post { id, title, createdAt, content }的列表,我将如何在单个查询中获取上一个和下一个?

我试过了 allPosts( first: 1, after: "cje4d8odwwqvz0155c4zs2n7i" last: 1, before: "cje4d8odwwqvz0155c4zs2n7i" ) { id title }

但是根据文档,不允许在之前和之后组合。我正在尝试获取导航箭头的指针,允许用户移动到上一个或下一个帖子。

1 个答案:

答案 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在使用beforeafter时需要String类型Post()查询需要ID类型。如果您可以控制架构,我想这可以更改,以便函数签名接受相同的类型。

我不确定beforeafter是否接受除了类似ID之外的其他字符串类型。