我有一个无限(窗口)列表,当前与基于光标的分页系统一起使用。
我当前方法的问题是用户必须滚动到列表底部,等待结果加载,再次滚动到底部,等等。
我希望允许用户滚动到列表的中间,而不必下载其间的所有数据。
我不明白如何按照中继分页建议来完成此操作。
您想要做的并不是真正的正常分页,并且不能仅通过使用中继分页规范来实现。我也不知道实现这一目标的任何标准化方法,这确实有意义,因为应该如何完成它是非常具体的情况。该规范并不限制添加任何附加功能,因此这里有几个选项供您使用:
添加新参数:
添加一个新参数,您可以使用它跳到您想要的特定点:
itemConnection(skip: 10000) {
edges {
node {
...
}
}
}
这个选项更简单,假设您现在已经知道提要包含多少个项目。
返回要跳转到的光标列表
您的服务器可能会返回“跳转点”列表,您可以在滚动时使用它。这样做的好处是您可以包含一些附加信息,当用户滚动时可以向他们显示这些信息。您的连接返回类型可能类似于:
type ItemConnection {
pageInfo: ItemConnectionPageInfo
edges: [ItemConnectionEdge]
totalCount: Int
skipPoints: [SkipPoint]
}
type SkipPoint {
cursor: String
# This combined with totalCount could be used to calculate which point to start loading from
# Alternatively some kind of percentage would work as well
position: Int
# Not mandatory, but could be used to show the date to where the user is scrolling to
date: String
}
您不需要返回所有光标,我认为 100-200 就不错,但您可以尝试一下。现在,当用户滚动长距离时,您可以使用任一方法来避免加载其间的所有内容。之后,当用户向上/向下滚动时,您可以使用正常的中继分页。如果用户开始长距离滚动,您可以使用这些方法之一返回到步骤 1。