在内部,如何为子查询中继缓存分页?

时间:2016-01-30 19:06:08

标签: relayjs

我们说我有一个博客:

  • 1博客有很多帖子
  • 1个帖子有很多喜欢的人
  • 1个帖子有很多评论
  • 1条评论有很多喜欢的人

在我博客的首页,我想展示前10个帖子。对于每篇帖子,我想展示10个最近的评论者,5个最近的评论,以及10个最喜欢每个评论的人。 (数字并不重要,我只是设置类似于facebook的东西)。

所以我的查询看起来像这样:

query getPosts(
  $postCount: Int, 
  $likersCount: Int, 
  $commentCount: Int, 
  $commentCursor: ID,
  $commentLikersCount: Int) {
  recentPosts(first: $postCount) {
    id,
    title, 
    body,
    likers(first: $likersCount) {
      id,
      name
    },
    comments(first: $commentCount, after: $commentCursor) {
      id,
      title,
      body,
      likers(first: $commentLikersCount) {
        id,
        name
      },
    }
  }
}

如果我使用新的$commentCursor重新提交此查询以加载更多注释,那么中继如何缓存数据以便它知道如何在本地获取其他所有内容?我得到了商店的基本图形架构,但对于这样的嵌套事物,我在调试器中感到困惑。

1 个答案:

答案 0 :(得分:1)

通常,您可以通过更改first: $commentCount参数来扩展分页范围,并且您不会使用after参数。只是说你将$commentCount5更改为10,Relay知道要获取位置6到10的项目,因为它已经有从1到5的项目。具体来说,你&# 39; ll看到它发出first: 5, after: <cursor>查询,其中<cursor>是第5条评论的光标(为此目的,Relay会自动为连接中的每个边缘获取光标,即使你没有&#39;明确要求他们。)