8

我使用first afterandlast before来做分页。 hasNextPage并且hasPreviousPage非常有用。

但我也需要total count这样我才能计算并page 5 of 343 pages在客户端上显示。

不幸的是,pageInfo即使我在服务器站点上有信息,这也不是其中的一部分。

您能否像已经做的那样在和扩展中包含一个total字段以获取总数?pageInfoconnectionFromArrayarrayLengthconnectionFromArraySlice

谢谢

4

3 回答 3

13

pageInfo旨在表示有关特定页面的信息,而项目总数实际上是连接本身的属性。我们建议count在连接中添加一个字段。您可以通过以下方式查询它:

fragment on TodoList {
  tasks(first: 10) {
    count # <-- total number of tasks
    edges { ... }
    pageInfo { ... }
}

Relay 支持连接上的任意字段,因此您可以自由命名 this counttotalCount等。

于 2015-12-10T02:20:50.927 回答
9

谢谢@Joe Savona

他是完全正确的。由于我花了一点时间才弄清楚如何将属性实际添加到服务器站点上的连接中,我想我也在这里分享:

var {connectionType: postsConnection} = connectionDefinitions({
  name: 'post',
  nodeType: qlPost,
  connectionFields: () => ({
    totalCount: {
      type: GraphQLInt,
      resolve: (connection) => connection.totalCount,
      description: `A count of the total number of objects in this connection, ignoring pagination.
This allows a client to fetch the first five objects by passing "5" as the
argument to "first", then fetch the total count so it could display "5 of 83",
for example.`
    }
  })
});

希望对其他人有所帮助。

干杯

于 2015-12-11T00:54:33.797 回答
2

totalCount在连接上使用了一段时间的自定义字段,但它引入了我一开始没有看到的复杂性(在突变后更新连接时,如果您希望它自动更新,则必须使用相同的 args 查询它)。

因此,我回到count每个连接旁边都有一个字段。在您的示例中,这意味着:

fragment on TodoList {
  taskCount
  tasks {
    edges { ... }
  }
}

我创建了一个为我创建它的小助手:https ://github.com/rea-app/relay-connection-count

于 2018-08-08T18:14:07.700 回答