这是this answer之前发布的关于反应中继突变警告的后续问题。
“在您的情况下,您需要做的是将FeatureLabelNameMutation getFragment添加到您的AddCampaignFeatureLabelMutation查询。”
就像那个问题中的OP一样,我也想做一个嵌套的接力突变,我已经尝试过做@Christine的建议,但是我不确定究竟要把getFragment
部分放在哪里。
在我的应用程序中,我想在用户创建任务时创建一个包含多个嵌套“子任务”的“任务”。
我尝试的是有效的,但我没有得到AddSubTaskMutation
突变的返回PayLoad。这是我到目前为止所尝试的内容:
export default class AddTaskMutation extends Relay.Mutation {
static fragments = {
classroom: () => Relay.QL`
fragment on Classroom {
id,
tasks(last: 1000) {
edges {
node {
id,
${AddSubTaskMutation.getFragment('task')}, //<-- what I tried adding
},
}
},
}`,
}`,
};
...
export default class AddSubTaskMutation extends Relay.Mutation {
static fragments = {
task: () => Relay.QL`
fragment on Task {
id,
}`,
};
...
Relay.Store.update(
new AddTaskMutation({
title,
instruction,
start_date,
end_date,
published: isPublished,
classroom: this.props.classroom
}),
{
onSuccess: (response) => {
let {taskEdge} = response.addTask;
for (let subTask of this.state.subTaskContent) {
Relay.Store.update(
new AddSubTaskMutation({
task: taskEdge.node,
type: subTask['type'],
position: subTask['position'],
...
}),
);
}
}
}
)
...
export default Relay.createContainer(TaskCreate, {
prepareVariables() {
return {
limit: Number.MAX_SAFE_INTEGER || 9007199254740991,
};
},
fragments: {
classroom: () => Relay.QL`
fragment on Classroom {
id,
tasks(last: $limit) {
edges {
node {
id,
...
}
}
},
...
${AddTaskMutation.getFragment('classroom')},
}
`,
},
});
除了没有获得有效载荷之外,我还收到以下警告:
Warning: RelayMutation: Expected prop `task` supplied to `AddSubTaskMutation` to be data fetched by Relay. This is likely an error unless you are purposely passing in mock data that conforms to the shape of this mutation's fragment.
Warning: writeRelayUpdatePayload(): Expected response payload to include the newly created edge `subTaskEdge` and its `node` field. Did you forget to update the `RANGE_ADD` mutation config?
所以我的问题是:我在getFragment
中添加AddTaskMutation.js
以使其有效?
答案 0 :(得分:1)
据我所知,问题是你并不真正理解突变“片段”与其他突变属性(胖查询和配置)的关系。您看到的警告与Relay有关,注意到您提供的任务道具不是来自AddSubtaskMutation
片段,而是来自AddTaskMutation
突变查询。但这真的只是一个红鲱鱼;你的问题是你根本不需要那些片段,你只需要适当地配置变异来创建你的新节点&amp;边缘。这是一些建议。
第1步
AddTaskMutation
和AddSubtaskMutation
中的片段,似乎没必要AddTaskMutation
的构造函数,为该任务获取一堆字段,并classroomID
指定受影响的教室AddSubTaskMutation
为子任务取一堆字段,用taskID
指定父任务AddTaskMutation
有效负载包含已修改的教室和新的任务边缘RANGE_ADD
定义classroomID
突变,以针对新任务定位教室FIELDS_CHANGE
上定义AddSubtaskMutation
突变,使用给定的taskID
改变父级(我不确定您如何存储子任务,可能是连接)。如果您真的需要,可以将其更改为RANGE_ADD
。步骤2:简化
AddTaskMutation
的输入以接受一个新任务和一系列子任务,并立即完成所有操作......