中继式(基于光标)分页和突然向前跳转许多页?

问题描述 投票:0回答:1

我有一个无限(窗口)列表,当前与基于光标的分页系统一起使用。

我当前方法的问题是用户必须滚动到列表底部,等待结果加载,再次滚动到底部,等等。

我希望允许用户滚动到列表的中间,而不必下载其间的所有数据。

我不明白如何按照中继分页建议来完成此操作。

graphql pagination relaymodern
1个回答
0
投票

您想要做的并不是真正的正常分页,并且不能仅通过使用中继分页规范来实现。我也不知道实现这一目标的任何标准化方法,这确实有意义,因为应该如何完成它是非常具体的情况。该规范并不限制添加任何附加功能,因此这里有几个选项供您使用:

添加新参数:

添加一个新参数,您可以使用它跳到您想要的特定点:

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。

© www.soinside.com 2019 - 2024. All rights reserved.