我可以使用 graphql 分页游标作为唯一标识符吗?

Can I use the graphql pagination cursor as an unique indentifier?

主要问题基本上在主题中,但我想更详细地描述一下问题。

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

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

我需要通过 incoming 但在 edges 的情况下,我需要仔细合并现有项目和传入项目。为了使它更优雅并避免重复,我想遍历传入的项目并检查每个项目是否都是唯一的。例如。如果 existing 边不包含存在于 incoming.

中的项目

所以我想知道是否可以使用存在于每个节点中的 graphql 分页游标作为比较参数。我知道我可以使用 Item 的 ID,但如果也可以使用 Cursor 值,我可以避免使用边缘项目的 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"
    }
}

感谢您的帮助!

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

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

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