Javascript UI不反映突变后的变化
我正在使用Javascript UI不反映突变后的变化,javascript,reactjs,graphql,relay,relaymodern,Javascript,Reactjs,Graphql,Relay,Relaymodern,我正在使用QueryRenderer在我的应用程序中填充编辑表单。在整个页面中,数据还显示在其他DOM元素中。然后,我通过一个变异将值保存回表单submit。一切都很好,除了我的UI没有反映出后面的变化。以下是我的初步查询: query EditPlanDialogQuery($planId: Int!) { planByPlanId(planId: $planId) { nodeId ...fields }
QueryRenderer
在我的应用程序中填充编辑表单。在整个页面中,数据还显示在其他DOM元素中。然后,我通过一个变异将值保存回表单submit。一切都很好,除了我的UI没有反映出后面的变化。以下是我的初步查询:
query EditPlanDialogQuery($planId: Int!) {
planByPlanId(planId: $planId) {
nodeId
...fields
}
allSchedules {
nodes {
...fields
}
}
}
然后我的变异和包装函数定义如下:
mutation EditPlanDialogMutation($input: UpdatePlanInput!) {
updatePlan(input: $input) {
plan {
...fields
}
}
}
同样,数据被正确地保存到数据库中,但是显示数据的其他DOM元素不会被渲染以反映更改。我想简单的更新
Relay
就能解决这个问题吗?根据他们的文件,无论如何,情况应该是这样。我试着处理更新程序回调,最终得到了要更新的页面,但它看起来非常笨拙。任何建议都将不胜感激,谢谢 不确定你得到的是什么字段,但我猜你没有从变异中得到id。
您必须始终请求节点的id,以便中继可以匹配存储中更新的节点。节点的id必须命名为id(而不是nodeId)
当我遇到这样的问题时,通常是因为两件事:1)前端中使用的项目数据没有作为突变负载(即id)返回;2) 在组件中,中继道具没有直接用于呈现内容,而是存储在状态或任何其他变量中,因此更新了prop.relay,但状态没有更新。试着检查一下这是否是你的情况。如果需要,请告诉我helped@soutot谢谢你的意见。你能详细说明你的第一点吗?至于第二个,我将中继道具传递到子组件中,并直接使用它进行渲染。再次感谢!当然在第一种情况下,我的意思是,当您编写变异的GraphQL时,您可以向其添加有效负载,这意味着变异完成后,它将返回您在有效负载中请求的任何数据。例如,假设您触发了AddUserMutation,有效负载可以是用户的id和名称,这是模型中的现有字段。但是,如果您不在前端使用此有效负载(即您只显示用户电子邮件),则在变异完成后,您的数据将不会更新。请注意,“在前端使用”表示您的GraphQL没有要求它。如果不清楚,请随时询问。希望它能帮助我尝试在初始查询和变异中选择nodeId
,但没有成功。谢谢你的输入。你能把域名nodeId改成id吗?当我遇到解决问题的类似问题时,它对我起了作用。具体来说,将nodeId更改为id并返回补丁中更改的字段。如果你更新你的答案,我会接受。很高兴它起作用,我更新了我的答案。(当id被命名为_id时,我也有类似的问题)
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),
}
);
}
mutation EditPlanDialogMutation($input: UpdatePlanInput!) {
updatePlan(input: $input) {
plan {
id
...fields
}
}
}