我有一个 GraphQL 查询,看起来像这样
query Person($cursor: ID, $limit: Int) {
items:{
...
}
name
...
cursor
}
在查询下一页时,我使用返回的
cursor
进行获取。
但是,用户也可以改变这些项目。假设用户删除了一个项目。我可以直接使用 writeFragment 或 cache.modify 将其从数组中删除。但是当我需要获取更多数据时,就会出现麻烦。
根据我在使用 API 时注意到的情况,光标映射到项目。例如,假设我删除了倒数第二项。获取更多的光标仍然保持不变。但是,如果我删除最后一项,当前光标现在无效。
我什至不确定我是否可以依赖这种观察,但我想知道人们如何实现光标样式的分页,其中光标可能会因突变而失效。 apollo 中有没有可以帮助解决这个问题的模式?除了再次获取所有内容之外,还有更好的选择吗?
谢谢!
我建议您使用标准化方法 - GraphQL 游标连接规范。
基本思想是查询一定数量的元素
after
某个游标或before
某个游标。通过这种方法,更改返回元素的集合不会影响下一次查询的结果。
请注意响应中存在一个名为
PageInfo
的对象,它描述了返回的选择中的开始和结束光标以及它们之后和之前是否有页面。
type PageInfo {
endCursor: String
hasNextPage: Boolean!
hasPreviousPage: Boolean!
startCursor: String
}
附注通常,可以选择元素标识符(有时是 base64 编码)作为光标。