首页 > 解决方案 > 中继分页 - 光标更改后从存储中删除旧节点

问题描述

我使用分页容器实现了分页系统。它适用于一个问题。

当我调用 loadMore 函数来获取新节点时,中继从服务器获取节点并添加到旧节点。但我想删除旧节点,只想显示新节点。

例如 $first = 10

当页面第一次加载时,我得到了 10 个节点,在 loadMore 之后,我得到了 20 个节点。但我只想显示新获取的 10 个节点。

我使用了这个分页示例

在 loadMore 操作后,我找不到删除旧节点的方法。

我知道中继分页只打算使用无限滚动,我只是想知道也许有办法解决这个问题。

标签: paginationgraphql-jsrelayjsrelayreact-relay

解决方案


Hacky/easy 解决方案是始终映射最后 10 个项目。

另一种解决方案是检查中继存储,ConnectionHandler并手动从存储中删除您不想要的边缘。

https://relay.dev/docs/en/relay-storedeleteNode中查看有关如何使用中继存储的更多信息。

更好的解决方案是创建一个可重新获取的容器并改用游标分页,这样每次通过设置游标和连接上的参数来获取下一个 10 项时。这样你就必须查询pageInfo并手动检查hasNextPage。

同样通过这种方式,您将能够进行双向分页(向前和向后分页)。

有关基于光标的分页的更多信息:

https://relay.dev/graphql/connections.htm

https://graphql.org/learn/pagination/


推荐阅读