UI不反映突变后的变化

时间:2018-04-12 18:31:06

标签: javascript reactjs graphql relay relaymodern

我正在使用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回调,并最终让页面更新,但它似乎非常笨重。感谢任何建议,谢谢!

1 个答案:

答案 0 :(得分:1)

不确定你得到了哪些字段,但我猜你不会从变异中得到id。 您总是需要请求节点的ID,因此中继可以匹配商店中更新的节点。节点的id必须命名为id(不是nodeId)

mutation EditPlanDialogMutation($input: UpdatePlanInput!) {
    updatePlan(input: $input) {
        plan {
            id
            ...fields
        }
    }
}