2016-04-16 6 views
3

Ich schreibe eine Deletionsmutation. Die Mutation sollte einen Key Knoten löschen und die viewer ‚s keys Sammlung aktualisieren (ich verwende Relay-Stil Sammlungen. viewer { keys(first: 3) { edges { node { ... }}}}Optimistisches Update für eine Deletionsmutation

Auf Anraten here, ich bin die FIELDS_CHANGE Config der Einfachheit halber verwendet, und es ist tatsächlich arbeiten : Jetzt

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, 
     }, 
     }, 
    ]; 
    } 
} 

, wie soll ich eine optimistische Mutation für dieses schreibe ich habe verschiedene Ansätze ausprobiert, aber keiner arbeitete

Antwort

2

optimistisch Update in Relay ist nur eine Simulation dessen, was der Server retur. n wenn der Vorgang erfolgreich ist. In Ihrem Fall entfernen Sie einen Schlüssel, dh das Ergebnis wäre ein Objekt ohne diesen Schlüssel.

Sie müssen auch die Schlüssel zu Ihren Fragmenten hinzufügen, damit sie in der Mutation verfügbar sind.

Das Problem mit diesem Ansatz ist, dass es auf Ihre Mutation angewiesen ist, um zu wissen, was Ihre aktuelle Schlüssel Paginierung ist. Wenn Sie mit der gesamten Verbindung gleichzeitig arbeiten, ist es in Ordnung, aber wenn Sie die Relay-Paginierung verwenden, sollten Sie in Erwägung ziehen, andere Mutationsoperationen zu verwenden.

Es gibt NODE_DELETE, die alle Vorkommen Ihres Schlüssels aus dem Relay-Speicher löschen können, oder Sie können RANGE_DELETE verwenden, um es nur von Ihrer aktuellen Verbindung zu löschen.

+0

Leider scheint diese Lösung nicht zu funktionieren: 1) Ich glaube, es gibt einen Tippfehler im Mutationsfragment, das sein sollte '{id, keys {cores (first ...'; 2) Eine Warnung erscheint wann das optimistische Update wird hinzugefügt: 'warning.js: 44 Warnung: RelayQueryWriter: Konnte keinen Typnamen für den Datensatz' Vmlld2VyOm1l' finden. (Er verschwindet, wenn ich '__typpename: 'Viewer'' zur optimistischen Antwort hinzufüge); und 3) leider keine Aktualisierung erfolgt. Soll ich ein Problem damit auftun? –

+0

Ich schrieb optimistische Antworten für Update-Mutationen, aber nicht für Lösch-Mutationen –

+0

Debugging Schritt für Schritt, sehe ich, dass der RelayQueryWriter '_writeConnection()' nicht im optimistischen Update (wie es in der endgültigen Aktualisierung tut), aber statt '_writeLink()' im 'keys' Feld. Anscheinend haben die Metadaten des 'Schlüssel'-Feldes in der Abfrage' isConnection: false', irgendeine Idee warum? –

Verwandte Themen