【问题标题】:Can I use the graphql pagination cursor as an unique indentifier?我可以使用 graphql 分页光标作为唯一标识符吗?
【发布时间】:2021-12-07 06:15:53
【问题描述】:

主要问题基本上是在主题中,但我想稍微详细地描述一下这个问题。

我正在处理基于光标的 Apollo graphql 分页,在我的缓存中,我应该定义 merge 函数来组合现有数据和传入数据。每个数据对象都有共同的 graphql 分页结构:

{
        "totalCount": ...,
        "pageInfo": {
            "startCursor": "...",
            "endCursor": "...",
            "hasNextPage": true,
            "__typename": "..."
        },
        "edges": [...],
}

我需要通过 incoming 中的相同属性覆盖现有数据,例如:pageInfototalCount 等,但在这种情况下edges 我需要仔细合并现有和传入的项目。为了使它更优雅并避免重复,我想迭代传入的项目并检查每个项目是否都是唯一的。例如。如果 existing 边不包含 incoming 中存在的项目。

所以我想知道是否可以使用每个节点中存在的 graphql 分页光标作为比较参数。我知道我可以使用项目的 ID,但如果也可以使用光标值,我可以避免使用边缘项目的 deeper 属性级别

这是数据结构的一个例子:

{
    "listArticles": {
        "totalCount": 22,
        "pageInfo": {
            "startCursor": "NjE2N2ZlMmI4N2NiNDczMGY0N2U5MGQ5",
            "endCursor": "NjE2ZDkzYTg0NDA5MWYyN2E0MmFkMGM5",
            "hasNextPage": true,
            "__typename": "PageInfo"
        },
        "edges": [
            {
                "cursor": "NjE2N2ZlMmI4N2NiNDczMGY0N2U5MGQ5",
                "node": {
                    "id": "6167fe2b87cb4730f47e90d9",
                    "commentsThreadId": "6167fe2b87cb4730f47e90d8",
                    "__typename": "Article"
                },
                "__typename": "ArticleEdge"
            },
            {
                "cursor": "NjE2ZDkzYTg0NDA5MWYyN2E0MmFkMGM5",
                "node": {
                    "id": "616d93a844091f27a42ad0c9",
                    "commentsThreadId": "616d93a844091f27a42ad0c8",
                    "__typename": "Article"
                },
                "__typename": "ArticleEdge"
            },
        ],
        "__typename": "ArticleConnection"
    }
}

感谢您的帮助!

【问题讨论】:

    标签: javascript pagination graphql apollo-client


    【解决方案1】:

    我不建议使用游标作为唯一标识符,尽管它们最终可能会唯一标识节点。它们应该只用于它们的本来面目:用于定位页面内节点的不透明字符串。

    据我所知,根据它们的实现,两个节点不能共享同一个游标,但两个游标可以用于同一个节点。

    我只会“更深一层”并使用实际的项目 ID。

    【讨论】:

    • 谢谢@sp00m,这是一个精彩且内容丰富的解释。老实说,我不知道关于光标的这种技术细微差别。我非常感谢这个信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 2013-08-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    相关资源
    最近更新 更多