我想要实现的流程是
- 用户单击“创建 X”按钮
- 使用中继突变创建空白 X
- 打开模态框以编辑 X
我有一个服务器端突变,它返回 x (类型X
)、它的父级以及它们之间的边缘,所以我可以做一个RANGE_ADD
客户端并更新商店。
const mutation = new CreateBlankXMutation({ ... })
Relay.Store.commitUpdate(mutation, {
onSuccess: ({ createBlankXMutation }) => {
const { x } = createBlankXMutation
showModal(EditXModal, { x })
}
})
showModal
是一个 redux 动作,它从第一个参数创建一个组件,并从第二个参数为其提供道具。
EditXModal
是一个中继容器,
{
fragments: {
x: () => Relay.QL`
fragment on X { ... }
`
}
}
我得到的具体错误是
RelayContainer: component `Container` was rendered with variables
that differ from the variables used to fetch fragment `creative`.
The fragment was fetched with variables `(not fetched)`,
but rendered with variables `{}`.
当您忘记正确组合 Fragments 时,通常会出现该错误,因此在 中CreateBlankXMutation
,我尝试添加EditXModal.getFragment(...)
和配置(两次都在 下getFatQuery
)- 没有骰子,同样的错误。REQUIRED_CHILDREN
x
如果我“检查”对象(console.log
),我可以看到片段在突变后被正确填充 -x
看起来像{ id: "...", ..., _someField: ... }
,但是一旦加载模式,片段就会正确解析(x
看起来相同 -_...
仍然具有片段属性)。