Pagination 为什么继电器+图形QL连接中没有“位置”参数?
GraphQL和Relay有一个健壮的分页算法,可以为最终用户轻松分页,甚至在无边界和顺序无关的结果中也可以分页 然而,我有一个用例,我真的不确定如何在GraphQL和relay中进行操作,而且很容易我确定我错过了一些东西Pagination 为什么继电器+图形QL连接中没有“位置”参数?,pagination,graphql,relayjs,Pagination,Graphql,Relayjs,GraphQL和Relay有一个健壮的分页算法,可以为最终用户轻松分页,甚至在无边界和顺序无关的结果中也可以分页 然而,我有一个用例,我真的不确定如何在GraphQL和relay中进行操作,而且很容易我确定我错过了一些东西 例如,如果我的列表是按orderBy参数排序的,那么如何获取第5项和仅获取第5项?如果后端有一个有序列表,并且希望获取特定位置的元素,只需将位置值指定为查询字段的参数。查询字段的代码如下所示: employee: { type: EmployeeType, args:
例如,如果我的列表是按orderBy参数排序的,那么如何获取第5项和仅获取第5项?如果后端有一个有序列表,并且希望获取特定位置的元素,只需将位置值指定为查询字段的参数。查询字段的代码如下所示:
employee: {
type: EmployeeType,
args: {
position: {
type: new GraphQLNonNull(GraphQLInt)
},
...args,
},
resolve: async (context, {position, ...args}) => {
// Get the ordered list of employees, probably from cache.
// Pick the employee with the requested position in the list.
// Return the employee.
},
},
这并没有很好的文档记录,但这里介绍了如何做到这一点
query {
allPeople(first: 5, last: 1) {
edges {
node {
name
}
}
}
}
首先,选择First:5以获取列表中的前5个人。然后,执行last:1,它从该子集中获取最后一个人。换句话说,找第五个人
如果你先做:5,最后做:2,你会得到列表中的第四和第五个人
如果返回错误-请在查询中手动重新键入单词query,它将正常工作。然后,在没有“第一个”和“最后一个”的情况下再试一次,以查看整个列表,您将看到Leia排名第五。尽管这听起来有点像黑客攻击,但连接规范的当前形式仍然存在。这比Facebook最初的内部GraphQL实现的表现要宽松一些,后者拒绝将“第一个”和“最后一个”一起使用,认为这是无效的。@wincent,我不这么认为。你能解释一下吗?该链接显示了如何在有光标的情况下执行此操作。OP希望在没有光标的情况下获取第N项。请看第4.3节:它描述了有光标和无光标的行为。还表示,强烈建议不要同时为first和last包含一个值,因为这可能会导致混淆查询和结果。所以,买主注意……这也是一种合法的方法。类似的常见模式是创建一个find参数,用于从连接中选择单个项。还请注意,游标和ID都是不透明的,因此您可以定义所需的任何行为和内部实现细节,然后使用/滥用它们。例如,如果您想实现基于限制/偏移量的分页模型,可以将偏移量烘焙到游标中,这样您就可以先执行:$cursor类型查询后执行:1,动态生成适当的游标。显然,这会破坏封装,因此请少用。