如何在Relay中管理游标和排序?

Eva*_*van 6 relayjs

我们有一个graphql服务器(不是用javascript编写)服务于分页的对象列表.我们试图遵循继电器规范,但我们遇到了一个可以使用澄清的有趣案例.

具体来说:是否允许游标依赖连接的其他输入?与https://github.com/graphql/graphql-relay-js/issues/20类似,我们的连接采用sort_key参数来确定返回列表的排序顺序.根据指定的排序顺序,对象的边可能返回不同的游标值(因为服务器在每种情况下都需要不同的信息来确定下一个对象).但是,仔细阅读https://facebook.github.io/relay/docs/guides-mutations.html#range-add表明这是不允许的; 返回新创建的边的突变必须返回一个光标,该光标可以普遍应用于可能出现该边的所有可能列表?facebook如何解决这个问题?

win*_*ent 2

是的,游标中应该包含足够的信息,以便能够从该点开始获取下一页(包括排序和过滤等约束),但是否/如何执行此操作取决于您,因为它是特定于实现的。

至于突变,在您的getConfigs()实现中,您可以rangeBehaviors在每次调用的基础上指定。因此,如果您有排序视图,您可以根据排序顺序选择追加或添加。此行为指定 Relay 将在客户端执行哪些操作来更新其存储。您仍然有责任确保 GraphQL 服务器的代码接收到正确执行实际突变所需的所有信息(通过输入变量)。

  • 我认为我没有正确解释我的担忧,这是一个更具体的示例:您在同一个中继分页列表上有两个视图,按不同的字段排序。同一对象出现在两个列表中,但具有不同的光标。您有一个突变来创建一个对象,并使用“RANGE_ADD”指定两个视图的不同行为。服务器端的突变必须在响应中返回单个游标;它返回两个光标中的哪一个,另一个视图由于根本没有光标而做什么? (3认同)