2016-04-16 12 views
3

私は削除突然変異を書いています。変異がKeyノードを削除し、viewerkeysコレクション(私はリレー形式のコレクションを使用しています更新する必要があります。viewer { keys(first: 3) { edges { node { ... }}}}削除突然変異のための楽観的な更新

にアドバイスhere後、私は簡単にするためにFIELDS_CHANGE設定を使用していて、それが実際に働いています:?。

export class DeleteKeyMutation extends Relay.Mutation { 
    static fragments = { 
    viewer:() => Relay.QL` 
     fragment on Viewer { id } 
    `, 
    }; 
    getMutation() { return Relay.QL`mutation {deleteKey}`; } 
    getVariables() { 
    return { 
     id: this.props.id, 
    }; 
    } 
    getFatQuery() { 
    return Relay.QL` 
     fragment on DeleteKeyPayload { 
     viewer { keys } 
     } 
    `; 
    } 
    getConfigs() { 
    return [ 
     { 
     type: 'FIELDS_CHANGE', 
     fieldIDs: { 
      viewer: this.props.viewer.id, 
     }, 
     }, 
    ]; 
    } 
} 

は今、私はこのために楽観的変異を書く必要がありますどのように私は別のアプローチを試してみたが、どれも働いたリレーで

答えて

2

楽観更新はサーバーがreturどうなるかだけのシミュレーションです操作が成功するとn。あなたのケースでは、1つのキーを削除しています。その結果、そのキーがないオブジェクトになります。

getOptimisticUpdate() { 
    return { 
    viewer: { 
     id: this.props.viewer.id, 
     keys: { 
     edges: this.props.viewer.keys.edges.filter((keyEdge) => key.node.id !== this.props.id) 
     } 
    } 
    }; 
} 

突然変異で利用できるようにフラグメントにキーを含める必要もあります。

static fragments = { 
    viewer:() => Relay.QL` 
    fragment on Viewer { id, keys { edges(first: 3) { node { id } }} 
    `, 
}; 

このアプローチの問題は、あなたの現在のキーページングが何であるかを知るために突然変異に依存していることです。一度にConnection全体を操作している場合は問題ありませんが、リレーページネーションを使用している場合は、他の突然変異操作の使用を検討する必要があります。

NODE_DELETEがあります。これにより、リレーストアからキーがすべて削除されたり、RANGE_DELETEを使用して現在の接続からキーを削除することができます。

+0

残念ながら、このソリューションはうまくいかないようです。1)突然変異フラグメントに誤字があります。これは '{id、keys {edges(first ...'; 2) 'warning.js:44警告:RelayQueryWriter:' Vmlld2VyOm1l'レコードの型名を見つけることができませんでした(楽観的な応答に '__typename: 'Viewer''を追加すると消えます)。 3)残念ながら更新は行われません。私はこれに関する問題を開くべきですか? –

+0

私は更新変異のための楽観的な応答を書いていましたが、削除変異のための楽観的な応答を書いていました –

+0

ステップバイステップで、私はRelayQueryWriterがオプティミスティックアップデートで(最終アップデートと同じように) '_writeConnection 'keys'フィールドでは' _writeLink() 'と呼ばれています。どうやら、クエリの 'keys'フィールドのメタデータには' isConnection:false'というアイデアがあります。 –

関連する問題