在中继中重用突变

时间:2016-05-17 02:30:57

标签: relayjs

是否可以重复使用突变?

我们说有一个突变UpdateItemMutation({prop1: 'Data', prop2: 'Data2'}) UpdateItemMutation({prop1: 'Data'}) UpdateItemMutation({prop2: 'Data2'}) ,我将道具传递给, 但有时我只是想更新一个特定的属性。

即。我希望能够做到:

@include

不幸的是,我的乐观配置抱怨,因为我将未定义的内容传递给它。

此外,由于我必须考虑更新所有内容的变异,这将重新查询整个事情,理想情况下更新' prop1'只会为' prop1'。

做一个胖查询

如果定义道具,使用{{1}}似乎无法在这里工作。

1 个答案:

答案 0 :(得分:1)

目前没有直接的方式可用,但有一个解决方法,如果你不介意拿取整个项目以应对突变。

如果您想更新项目的可变数量的属性,您可以编写一个带有属性列表和值列表的变异(服务器端)。

// Using `graphql-relay` library's helper function `mutationWithClientMutationId`.
const UpdateItemMutation = mutationWithClientMutationId({
  name: 'UpdateItem',
  inputFields: {
    itemId: { type: new GraphQLNonNull(GraphQLID) }
    properties: { type: new GraphQLList(GraphQLString) },
    values: { type: new GraphQLList(GraphQLString) },
  },
  outputFields: {
    item: {
      type: ItemType,
      resolve: (item) => item,
    },
  },
  mutateAndGetPayload: ({itemId, properties, values, ...args}) => {
    // Iterate over the properties and values.
    // Update the item with itemId.

    return item;
  },
});

如下所示调用客户端变异:

Relay.Store.commitUpdate(new UpdateItemMutation({
  item: this.props.item,
  properties: ['prop1', 'prop2'],
  values: ['value1', 'value2'],
}));

关于客户端变异的乐观更新,您可以制作propertiesvalues的返回值,即更新的属性及其值。

据我所知,目前Relay不支持在胖查询中有条件地包含字段。与Relay容器不同,我们不能在fat查询中使用变量。我相信,看到current efforts by Relay contributors,变异API将在不久的将来更加强大而精简。