【发布时间】:2016-05-13 20:36:15
【问题描述】:
这是this answer 之前在 SO 上发布的关于 react-relay 突变警告的后续问题。
“在您的情况下,您必须将 FeatureLabelNameMutation getFragment 添加到您的 AddCampaignFeatureLabelMutation 查询中。”
与该问题中的 OP 一样,我也想进行嵌套中继突变,并且我已经尝试按照 @Christine 的建议进行操作,但我不确定将 getFragment 部分放在哪里。
在我的应用程序中,我想在用户创建任务时创建一个包含多个嵌套“子任务”的“任务”。
我尝试过的工作,但我没有得到 AddSubTaskMutation 突变的返回 PayLoad。到目前为止,这是我尝试过的:
AddTaskMutation.js
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
},
}
},
}`,
}`,
};
...
AddSubTaskMutation.js
export default class AddSubTaskMutation extends Relay.Mutation {
static fragments = {
task: () => Relay.QL`
fragment on Task {
id,
}`,
};
...
TaskCreate.js
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 来完成这项工作?
【问题讨论】:
-
使用
getFragment进行突变有点不常见 - 只有当突变本身需要额外数据时才需要在突变执行之前。那么,当您真的只想添加一个新任务时,看到您的突变请求多达 1000 个其他任务,这有点奇怪。您是否将任何这些数据用于突变本身?