我可以使用 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。
主要问题基本上在主题中,但我想更详细地描述一下问题。
我正在研究基于游标的 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。