【问题标题】:When should I use a Relay GraphQL connection and when a plain list?什么时候应该使用 Relay GraphQL 连接,什么时候应该使用普通列表?
【发布时间】:2016-01-10 08:16:55
【问题描述】:

在 Relay GraphQL 中,连接和列表都类似于数组,但它们具有不同的特性。我应该什么时候使用它们?

【问题讨论】:

    标签: graphql relayjs


    【解决方案1】:

    Connections

    • 比简单的列表更强大、更灵活。
    • 支持分页(前进和后退),带光标。
    • 细粒度的mutation 支持(例如RANGE_ADDRANGE_DELETENODE_DELETE,如the guide 中所述)。
    • 需要firstlast 参数以限制结果集的大小。
    • 有一个edges 字段,提供一个位置来定位每个边缘、特定于边缘的数据。
    • 较重的概念,需要在架构中定义更多工作。

    列表

    使用哪个?

    • 只要需要分页,就应该使用连接。
    • 如果您需要对突变进行细粒度控制,您可以选择使用连接,即使您不需要分页。
    • 如果您想要连接中的所有项目,您可以使用带有较大数字的first
    • 如果您想以最小的努力公开一个简短的列表,请使用一个简单的列表。

    【讨论】:

    • 客户端 Relay 中的连接相关功能是否完全是声明性的?我看到通过使用连接,您可以在客户端中获得“细粒度的变异支持”。是否有任何使用此功能的命令式 API?我没有看到任何东西——只是想确认我没有遗漏任何东西。
    • 另外,为什么列表不支持分页?我的意思是,您可以使用列表类型字段构建自己的分页,对吧?
    • @dimadima 您绝对可以支持使用列表进行分页。在 graph.cool,我们支持中继兼容和简单的 graphql 端点,使用列表作为您的数据模型。列表查询通过跳过和采取机制支持分页。例如 {allUsers(skip: 20, take: 10)} 将返回第三页。这种中继地址方法的问题是,如果在页面请求之间添加数据,页面将被移动,您可能会丢失节点或返回重复项。这就是需要光标的原因。
    • 在哪里可以看到定义和存储边缘特定数据的示例?
    猜你喜欢
    • 2023-04-02
    • 2011-04-15
    • 2017-04-10
    • 2012-03-19
    • 2018-05-12
    • 2018-12-11
    • 1970-01-01
    • 2022-09-28
    • 2021-09-07
    相关资源
    最近更新 更多