2016-05-17 15 views
1

突然変異を再利用することは可能ですか?リレーで突然変異を再利用

私は小道具を渡している変異UpdateItemMutationがあるとしましょう。 しかし、時には特定の属性を更新したいだけです。

すなわち、私が行うことができるようにしたい:

残念ながら
UpdateItemMutation({prop1: 'Data', prop2: 'Data2'}) 
UpdateItemMutation({prop1: 'Data'}) 
UpdateItemMutation({prop2: 'Data2'}) 

、私の楽観的な設定は、私はそれに未定義を渡しているので、文句を言います。

また、私はすべてを更新する変異を考慮する必要があるので、これは全部を再クエリし、理想的には 'prop1'を更新することは 'prop1'のためにfatQueryを行うだけです。

@includeを使用すると、支柱が定義されていてもここでは機能していないようです。

+0

あなたの突然変異コードとあなたが得ているエラーを投稿できますか? – Chris

答えて

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コンテナとは異なり、fatクエリでは変数を使用できません。 current efforts by Relay contributorsを見ると、突然変異のAPIはもっと強力で、近い将来に合理化されると私は信じている。

関連する問題