如何添加没有先前标识的变异数据

时间:2017-11-28 08:51:26

标签: graphql relay

我们说我有一个查询

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)?

1 个答案:

答案 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 });
}