变异没有请求在RANGE_ADD上的fatQuery中主动获取容器数据

时间:2017-05-29 21:26:08

标签: relayjs

我正在尝试使用现在所谓的Relay Classic进行RANGE_ADD突变(这可能是用Modern解决的)。我收到错误:

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

所以,是的,有效载荷不会发送超出预期响应形状clientMutationId的任何内容,因为请求变异不是要求它。

根据@Joe Savona,https://github.com/facebook/relay/issues/521,如果没有相交容器请求此数据,则可能会发生这种情况。但这对我来说并不完全正确。我的Route正在请求:

things: (Component) => Relay.QL`
    query {
      allThings(variable: $variable) {
        ${Component.getFragment('things')},
      }
    }
`,

而我的fatQuery请求:

fragment on AddMockThing {
  allThings(variable: "${variable}", first: 100) {
    edges { 
      node {
        id,
      },
    },
  },
  newThingEdge
}

现在您可能会说这些查询不一样,因为first: 100版本中有额外的getFatQuery,但如果我不使用它,我会收到错误:

Error: Error: You supplied the 'edges' field on a connection named 'allThings', but you did not supply an argument necessary to do so. Use either the 'find', 'first', or 'last' argument.

另一方面,如果我向first: 100查询添加Route,我会收到错误:Error: Invalid root field 'allThings'; Relay only supports root fields with zero or one argument.

在fatQuery和硬地之间徘徊。非常感谢帮助!

1 个答案:

答案 0 :(得分:0)

您收到验证错误,因为Relay编译器正在查找连接参数(first: X)。您可以通过添加@relay(pattern: true)指令来禁用此特定验证。这将胖查询标记为匹配的“模式”,而不是具体的东西。

fragment on AddMockThing @relay(pattern: true) {
  allThings(variable: "${variable}") {
    edges { 
      node {
        id,
      },
    },
  },
  newThingEdge
}

此处有更多信息:https://stackoverflow.com/a/34112045/802047