我正在使用QueryRenderer
填充我的应用程序中的编辑表单。数据也在整个页面中的其他DOM元素中显示。然后我通过变异将值保存在表单提交中。一切都很好,除了我的UI没有反映后面的变化。这是我的初步查询:
query EditPlanDialogQuery($planId: Int!) {
planByPlanId(planId: $planId) {
nodeId
...fields
}
allSchedules {
nodes {
...fields
}
}
}
然后我的变异和包装函数定义如下:
mutation EditPlanDialogMutation($input: UpdatePlanInput!) {
updatePlan(input: $input) {
plan {
...fields
}
}
}
...
editPlan = (values: any) => {
const {
nodeId,
...otherValues
} = values;
const variables = {
input: {
nodeId: nodeId,
planPatch: { ...otherValues },
},
};
commitMutation(
environment,
{
mutation,
variables,
onCompleted: (response, errors) => alert(response),
onError: err => alert(err),
}
);
}
同样,数据正在正确地保存到数据库中,但是不显示显示数据的其他DOM元素以反映更改。我想过简单的更新Relay
处理了这个?根据他们的文档,无论如何应该是这样的。我试着弄乱updater
回调,并最终让页面更新,但它似乎非常笨重。感谢任何建议,谢谢!
答案 0 :(得分:1)
不确定你得到了哪些字段,但我猜你不会从变异中得到id。 您总是需要请求节点的ID,因此中继可以匹配商店中更新的节点。节点的id必须命名为id(不是nodeId)
mutation EditPlanDialogMutation($input: UpdatePlanInput!) {
updatePlan(input: $input) {
plan {
id
...fields
}
}
}