2017-04-23 1 views
2

Also im Grunde möchte ich meine UI nach einer Mutation aktualisieren, aber das war wirklich ein Schmerz, seit ein paar Tagen fest.Apollo Client Update nach Mutation kann nicht über Original-Ergebnis zuordnen?

Einige meiner Komponenten basieren auf meiner Stammabfrage und bilden die Ergebnisse ab.

Immer wenn ich eine neue Ressource erstelle und meine Root-Abfrage aktualisiere, werden die ursprünglichen Ergebnisse nicht mehr geladen, was eine can't read property map of undefined verursacht, weil das Ergebnis nicht mehr da ist. Das Hinzufügen eines Schecks tut nichts, es wird nur für immer geladen.

Dies ist meine Mutation:

export const withCreateLink = graphql(createLink, { 
// Mutate normally gets passed as prop to wrapped component 
props({ownProps, mutate}) { 
    return { 
     // But for updating the store we're actually hijacking mutate to a custom function   
     createLink(url, description, group) { 
      return mutate({ 
       variables: { 
        url, 
        description, 
        group 
       }, 
       optimisticResponse: { 
        createLink: { 
         __typename: 'Link', 
         id: -1, 
         url, 
         description, 
         group: { 
          id: group 
         } 
        } 
       }, 
       update: (proxy, mutationResult) => { 
        const query = getAllGroups; 
        const data = proxy.readQuery({query}); 

        data.allGroups.forEach((groupData) => { 
         if(groupData.id == group) 
          groupData.links.push(mutationResult.data.createLink); 
        }); 

        proxy.writeQuery({ 
         query, 
         data 
        }) 
       } 
      }) 
     } 
    } 
} 
}); 

Ich möchte nur einfach meine UI aktualisieren, indem nur die Gruppe erfrischend, dass meine Ressource hinzugefügt wurde. Kann mir jemand helfen?

Antwort

0

dataIdFromObject Transforming für Typnamen zu überprüfen, funktioniert der Trick:

dataIdFromObject: (result) => { 
    if (result.id && result.__typename) { 
     return result.__typename + ':' + result.id; 
    } 
    return null; 
} 

Ich glaube, ich nicht mit nur mit Id zu meinem Cache schreiben konnte. Dies ist anscheinend ein Vorschlag für den Ausfall.

+0

Dies ist die Standardeinstellung seit 1.0. Sie sollten also kein DataIdFromObject bereitstellen. – helfer

Verwandte Themen