我试图理解RANGE_ADD
。我已经提供了突变配置, for RANGE_ADD
,以及所有必需的信息。我使用viewer
命名约定,我的连接嵌套在viewer
. 下面是我完整的中继突变的样子......
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 所要求的只是clientMutationId
. 这是 Relay 发出的请求...
{
"query": "mutation CreateTeamMutation($input_0:CreateTeamInput!){createTeam(input:$input_0){clientMutationId}}",
"variables": {
"input_0": {
"name": "foo bar",
"clientMutationId": "0"
}
}
}
并且,以连锁反应的方式,这会导致 Relay引发错误,他期望viewer
and用于突变配置。edge
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
才能工作?突变通过服务器,并在服务器上创建记录,只是客户端突变配置未能将更改的数据合并到存储中。