我们说我有一个查询
query {
project(thing: "cats") {
id
}
}
返回
{
"data": {
"project": null
}
}
因为猫的项目还没有存在。现在我想用Relay(经典)创建它。我的变异看起来像这样(通过硬编码变量等简化了一下):
export class CreateProjectMutation extends Relay.Mutation {
getMutation () {
return Relay.QL`
mutation {
createProject (input: { thing: "cats" }) {
project {
id
}
}
}
`;
}
getFatQuery () {
return Relay.QL`
fragment on ProjectCreationPayload @relay(pattern: true) {
project
}
`;
}
getConfigs () {
return [{
type: 'FIELDS_CHANGE',
fieldIDs: {
// PROBLEM: There is no project id yet to change!
project: this.props.project.id
}
}];
}
static fragments = {
project: () => Relay.QL`
fragment on Project {
id
}
`
};
}
所以问题是我不能做FIELDS_CHANGE因为项目还没有附加id。我怎么能替换现有的
{ project: null }
在具有变异有效负载的客户端存储中(服务器端生成的项目ID)?
答案 0 :(得分:1)
在this github issue comment找到答案。最后将变换转换为使用Relay现代更新程序并使用以下代码,基于githup答案:
const projectUpdater = (proxyStore, data) => {
const projectFromStore = proxyStore.getRootField('createProject');
const projectProxy = projectFromStore.getLinkedRecord('project');
const root = proxyStore.getRoot();
const thing = _.get(data, 'createProject.project.thing', null);
root.setLinkedRecord(projectProxy, 'project', { thing });
}