GraphQL分页查询报错pageInfo的hasNextPage为未知参数如何解决
报错原因
- 你使用的是基于Relay规范的GraphQL Connection游标分页模式,
pageInfo是Connection类型下的只读返回字段,本身不支持传入任何查询参数,作用是由服务端返回分页元数据(是否存在下一页、分页游标等)。你错误将hasNextPage、endCursor作为入参传递给pageInfo字段,直接触发了“未知参数”的报错。 - Connection模式下,所有分页控制参数都定义在Connection类型的入口字段(也就是你代码中的
people字段)上,常用分页参数包括:first:指定从游标位置向后取多少条数据after:传入上一页返回的endCursor值,作为本次查询的起始位置last:指定从游标位置向前取多少条数据before:传入上一页返回的startCursor值,作为本次查询的结束位置
- 你定义的
$hasNextPage变量完全冗余:hasNextPage是服务端计算后返回给调用方的结果字段,不需要客户端提前传入。
代码修改方法
将分页参数移到people字段上,移除pageInfo上的错误参数,删除无用的$hasNextPage变量定义,修正后的查询语句如下:
query myquery($viewId: ID!, $endCursor: String) { Core_eventPeopleListView(viewId: $viewId) { id people( first: 20, # 可根据需求修改为你需要的单页数据条数 after: $endCursor ) { pageInfo { hasNextPage endCursor } nodes { firstName lastName jobTitle organization websiteUrl } } } }
分页查询的调用逻辑:
- 拉取第一页数据时,变量中
endCursor传null即可,示例变量:
{ "viewId": "RXZlbnRWaWV3XzMyMTY1Mw==", "endCursor": null }
- 拉取后续页时,先判断上一页接口返回的
pageInfo.hasNextPage值:如果为true,就把上一页返回的pageInfo.endCursor作为本次请求的endCursor变量值传入,发起查询;如果为false,说明已经加载到最后一页,不需要再发起分页请求。
内容的提问来源于stack exchange,提问作者Tori Elstrom
相关产品推荐
相关产品推荐

