Javascript 如何在pageInfo中将总数传递给客户端
我在之后使用Javascript 如何在pageInfo中将总数传递给客户端,javascript,reactjs,relayjs,graphql-js,Javascript,Reactjs,Relayjs,Graphql Js,我在之后使用第一个,在之前使用最后一个进行分页。 hasNextPage和hasPreviousPage非常有用 但我需要的也是总计数,这样我就可以计算并在客户端上显示像第5页(共343页)这样的内容 不幸的是,这不是pageInfo的一部分,即使我在服务器站点上有这些信息 请在pageInfo中包含total字段,并扩展connectionFromArray以获取总arrayLength值,就像connectionFromArraySlice已经做的那样 感谢pageInfo旨在表示有关特定页
第一个
,在
之前使用最后一个
进行分页。
hasNextPage
和hasPreviousPage
非常有用
但我需要的也是总计数
,这样我就可以计算并在客户端上显示像第5页(共343页)
这样的内容
不幸的是,这不是pageInfo
的一部分,即使我在服务器站点上有这些信息
请在pageInfo
中包含total
字段,并扩展connectionFromArray
以获取总arrayLength
值,就像connectionFromArraySlice
已经做的那样
感谢pageInfo
旨在表示有关特定页面的信息,而项目总数实际上是连接本身的属性。我们建议在连接中添加一个count
字段。您可以通过以下方式查询:
fragment on TodoList {
tasks(first: 10) {
count # <-- total number of tasks
edges { ... }
pageInfo { ... }
}
TodoList上的片段{
任务(第一:10){
伯爵#谢谢你@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.`
}
})
});
希望这能帮助别人
Cheers我在连接上使用了一段时间的自定义totalCount
字段,但它引入了一种我一开始没有看到的复杂性(在变异后更新连接时,如果要自动更新,必须使用相同的参数查询它)
因此,我在每个连接旁边都有一个count
字段。在您的示例中,这意味着:
fragment on TodoList {
taskCount
tasks {
edges { ... }
}
}
我创建了一个为我创建的小助手:谢谢你发布这个。你是如何为connection.totalCount分配一个值的?我的项目布局有点不同,我很难找到合适的位置来填充该值。我不知道Relay,但在Apollo中,你会使用@connection
指令从缓存键中排除limit
或offset
等参数:这!当连接中totalCount
位于pageInfo
和edges
旁边时,它会造成很大的复杂性。如果用户只查询taskCount
,您可能不想查询y db用于分页任务。因此您需要将它们分开。您当然可以检查是否查询了边缘
或页面信息
,但大多数情况下都不是那么简单。如果您查看GitHub的和spectrum/spectrum
的模式,或者Shopify的管理API,您可以看到它们使用的是完全相同的m方法。可能是为了保持事物的独立性和简化事物。