在中继中重用突变
Reusing a Mutation in Relay
是否可以重复使用突变?
假设存在一个突变UpdateItemMutation
,我正在将道具传递给它,
但有时我只想更新特定属性。
即我希望能够做到:
UpdateItemMutation({prop1: 'Data', prop2: 'Data2'})
UpdateItemMutation({prop1: 'Data'})
UpdateItemMutation({prop2: 'Data2'})
不幸的是,我的乐观配置出现问题,因为我向它传递了一个未定义的值。
此外,由于我必须考虑更新所有内容的突变,这将重新查询整个内容,理想情况下更新 'prop1' 只会为 'prop1' 执行 fatQuery。
如果定义了 prop,则使用 @include
在这里似乎不起作用。
目前没有直接的方法可用,但有一个解决方法,如果您不介意获取整个项目以响应突变。
由于您想要更新一个项目的可变数量的属性,您可以编写一个带有属性列表和值列表的变更(服务器端)。
// 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
中制作 return 值,即更新的属性及其值。
据我所知,Relay 目前不支持在胖查询中有条件地包含字段。与中继容器不同,我们不能在胖查询中使用变量。看到 current efforts by Relay contributors,相信在不久的将来,变异 API 会更加强大和精简。
是否可以重复使用突变?
假设存在一个突变UpdateItemMutation
,我正在将道具传递给它,
但有时我只想更新特定属性。
即我希望能够做到:
UpdateItemMutation({prop1: 'Data', prop2: 'Data2'})
UpdateItemMutation({prop1: 'Data'})
UpdateItemMutation({prop2: 'Data2'})
不幸的是,我的乐观配置出现问题,因为我向它传递了一个未定义的值。
此外,由于我必须考虑更新所有内容的突变,这将重新查询整个内容,理想情况下更新 'prop1' 只会为 'prop1' 执行 fatQuery。
如果定义了 prop,则使用 @include
在这里似乎不起作用。
目前没有直接的方法可用,但有一个解决方法,如果您不介意获取整个项目以响应突变。
由于您想要更新一个项目的可变数量的属性,您可以编写一个带有属性列表和值列表的变更(服务器端)。
// 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
中制作 return 值,即更新的属性及其值。
据我所知,Relay 目前不支持在胖查询中有条件地包含字段。与中继容器不同,我们不能在胖查询中使用变量。看到 current efforts by Relay contributors,相信在不久的将来,变异 API 会更加强大和精简。