【发布时间】: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 才能工作?变异通过服务器,并在服务器上创建记录,只是客户端变异配置未能将更改的数据合并到存储中。
【问题讨论】: