繁体   English   中英

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

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

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

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

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

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

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

下面是一个数据结构的例子:

{
    "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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM