是否可以重复使用突变?
我们说有一个突变UpdateItemMutation({prop1: 'Data', prop2: 'Data2'})
UpdateItemMutation({prop1: 'Data'})
UpdateItemMutation({prop2: 'Data2'})
,我将道具传递给,
但有时我只是想更新一个特定的属性。
即。我希望能够做到:
@include
不幸的是,我的乐观配置抱怨,因为我将未定义的内容传递给它。
此外,由于我必须考虑更新所有内容的变异,这将重新查询整个事情,理想情况下更新' prop1'只会为' prop1'。
做一个胖查询如果定义道具,使用{{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'],
}));
关于客户端变异的乐观更新,您可以制作properties
和values
的返回值,即更新的属性及其值。
据我所知,目前Relay不支持在胖查询中有条件地包含字段。与Relay容器不同,我们不能在fat查询中使用变量。我相信,看到current efforts by Relay contributors,变异API将在不久的将来更加强大而精简。