突变不获取由胖查询与 RANGE_ADD 一起指定的数据?

Posted

技术标签:

【中文标题】突变不获取由胖查询与 RANGE_ADD 一起指定的数据?【英文标题】:Mutation not fetching data specified by the fat query in conjunction with RANGE_ADD? 【发布时间】:2016-04-08 16:27:18 【问题描述】:

我正在努力理解RANGE_ADD。我已经为RANGE_ADD 提供了突变配置以及所有必需的信息。我使用viewer 命名约定,我的连接嵌套在viewer 中。下面是我完整的 Relay Mutation 的样子......

import Relay from "react-relay";

export default class CreateTeamMutation extends Relay.Mutation 
  static fragments = 
    viewer: () => Relay.QL`
      fragment on Viewer 
        id
      
    `
  

  getMutation() 
    return Relay.QL`
      mutation  createTeam 
    `;
  

  getVariables() 
    return 
      name: this.props.name
    ;
  

  getFatQuery() 
    return Relay.QL`
      fragment on CreateTeamPayload 
        edge,
        viewer 
          teams
        
      
    `;
  

  getConfigs() 
    console.log(this.props.viewer);
    return [
      type: "RANGE_ADD",
      edgeName: "edge",
      parentID: this.props.viewer.id,
      parentName: "viewer",
      connectionName: "teams",
      rangeBehaviors: 
        "": "append"
      
    ];
  
;

我为viewer id 提供了一个片段,在运行时,我可以看到在getConfigs 中存在。

在 GraphQL 突变响应负载 CreateTeamPayload 中,提供了 viewer 字段,以便 Relay 可以利用 RANGE_ADD 的突变配置中的连接。此外,在CreateTeamPayload 内,新边提供为edge

这三位信息(父级的查看器 ID、连接信息和边缘)似乎是 RANGE_ADD 所需的全部。我还确保通过 fat 查询从服务器请求这些数据,以便 Relay 可以访问它以进行突变配置。

Relay 似乎不包括我在胖查询中指定的内容,以及突变配置所需的内容,以及它分派到服务器的内容。 Relay 请求的只是clientMutationId。这是 Relay 发出的请求……


  "query": "mutation CreateTeamMutation($input_0:CreateTeamInput!)createTeam(input:$input_0)clientMutationId",
  "variables": 
    "input_0": 
      "name": "foo bar",
      "clientMutationId": "0"
    
  

而且,以连锁反应的方式,这会导致 Relay 抛出一个错误......

Warning: writeRelayUpdatePayload(): Expected response payload to include the newly created edge `edge` and its `node` field. Did you forget to update the `RANGE_ADD` mutation config?

如果 Relay 包含这些必填字段,它们可能完全存在。 RANGE_ADD 是否必须伴随 REQUIRED_CHILDREN 才能工作?变异通过服务器,并在服务器上创建记录,只是客户端变异配置未能将更改的数据合并到存储中。

【问题讨论】:

【参考方案1】:

这可能是一个模棱两可的警告:https://github.com/facebook/relay/issues/542

中继将范围行为与之前获取的连接相交。

您在此处的范围行为仅定义了当团队连接不受任何呼叫影响时要执行的操作。您如何在应用中调用您的团队连接?

例如,如果您的应用获取teams(order_by: 'recent'),您应该定义类似'orderby(recent)': 'append' 的范围行为

【讨论】:

如果有多个参数怎么办,例如teams(id: $teamId, first: 1)?

以上是关于突变不获取由胖查询与 RANGE_ADD 一起指定的数据?的主要内容,如果未能解决你的问题,请参考以下文章

分页连接加上突变增加的边缘

删除突变后不重新获取查询(Apollo Graphql & Nextjs)

RelayMutation 期望 prop 是 Relay 获取的数据,向查询添加突变不起作用

Relay.js 中的根查询创建和删除

如何使 Flutter graphql 订阅与轮渡包一起使用?

运行突变后重新获取查询