当有 0 个项目/边时,“PageInfo”中“startCursor”和“endCursor”的值是否正确?中继分页规范是否不正确?

Luk*_*odt 5 pagination relay graphql

中继分页规范说明了以下内容PageInfo

它还必须包含字段startCursorendCursor,这两个字段都返回非空不透明字符串。

[...]

startCursorendCursor必须分别对应于边中第一个和最后一个节点的光标。

但如果我想退回零件商品怎么办?有很多原因可以解释为什么对该特定端点的请求会返回空连接。

我不明白在这种情况下应该有什么startCursor价值观endCursor。显而易见的答案是null,但规范明确表示“非空”。那是怎么回事?

就其价值而言,我查看了大约 15 篇有关“graphql 分页”主题的文章,所有这些文章要么忽略该问题,要么null在空列表的情况下进行分配。那么在这一点上,该规范似乎是错误的或与现实世界不兼容?

pvg*_*ijn 5

更新:(31-01-2022):规范已更新,这些字段现在正式可为空。

通过这个拉取请求


我在中继 Github 上提交了一个错误:https ://github.com/facebook/relay/issues/3708

看来规范的解决方案是忽略规范并使它们非空,因为 JavaScript 和 java 实现都是这样做的。

Graphql-Relay-JS: https://github.com/graphql/graphql-relay-js/blob/3796e0904fbfe0dd86e540d5b4df236330c8a5e7/src/connection/arrayConnection.ts

Java: https: //github.com/graphql-java/graphql-java/blob/1ee9630c7d25ccb55a5b1d9b1ccf7bf7895a8c7f/src/main/java/graphql/relay/Relay.java#L54