我正在努力理解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 Mutation响应有效负载CreateTeamPayload
中,提供viewer
字段,以便Relay可以使用RANGE_ADD
的突变配置中的连接。此外,在CreateTeamPayload
中,新边缘提供为edge
。
这三个信息位(父级的查看者ID,连接信息和边缘)似乎都是RANGE_ADD
所要求的。我还确保通过胖查询从服务器请求这些数据,以便Relay可以访问变异配置。
Relay似乎不包括我在胖查询中指定的内容,以及变量配置所需的内容,但是它调度到服务器的内容。 Relay请求的所有内容都是clientMutationId
。以下是继电器的要求......
{
"query": "mutation CreateTeamMutation($input_0:CreateTeamInput!){createTeam(input:$input_0){clientMutationId}}",
"variables": {
"input_0": {
"name": "foo bar",
"clientMutationId": "0"
}
}
}
并且,在连锁反应方式中,这会导致Relay(正在期望突变配置的viewer
和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
为此工作?突变进入服务器,并在服务器上创建记录,只是客户端突变配置无法将更改的数据合并到商店中。
答案 0 :(得分:2)
这可能是一个含糊不清的警告:https://github.com/facebook/relay/issues/542
Relay将范围行为与先前获取的连接相交。
此处的范围行为仅定义当团队连接不受任何呼叫影响时要执行的操作。你是如何在应用程序中调用团队连接的?
例如,如果您的应用提取teams(order_by: 'recent')
,则应定义范围行为,例如'orderby(recent)': 'append'