【发布时间】:2021-12-07 06:15:53
【问题描述】:
主要问题基本上是在主题中,但我想稍微详细地描述一下这个问题。
我正在处理基于光标的 Apollo graphql 分页,在我的缓存中,我应该定义 merge 函数来组合现有数据和传入数据。每个数据对象都有共同的 graphql 分页结构:
{
"totalCount": ...,
"pageInfo": {
"startCursor": "...",
"endCursor": "...",
"hasNextPage": true,
"__typename": "..."
},
"edges": [...],
}
我需要通过 incoming 中的相同属性覆盖现有数据,例如:pageInfo、totalCount 等,但在这种情况下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