Ich habe gerade angefangen, Apollo-Client auf einer React-Anwendung zu verwenden, und ich bin auf Zwischenspeicherung fest. Ich habe eine Homepage mit einer Liste von Produkten, wo ich eine Abfrage, um die ID und den Namen dieser Produkte und eine Produktseite, wo ich Abfrage für die ID, Name, Beschreibung und Bild.Apollo-Client-Cache
Ich möchte, dass wenn ein Benutzer die Homepage zuerst besucht, dann eine bestimmte Produktseite, nur eine Abfrage für die Beschreibung und das Bild des Produkts, auch den Namen während des Ladens anzeigen (da ich es bereits zwischengespeichert haben sollte). Ich folgte der "Kontrolle des Ladens" Teil der Dokumentation (http://dev.apollodata.com/react/cache-updates.html) aber konnte es immer noch nicht lösen.
Die Abfrage, die durchgeführt wird, wenn wir auf die Produktseite gehen, fragt immer noch nach der ID und dem Namen des Produkts, während sie zwischengespeichert werden sollten, da ich bereits danach gefragt habe.
Ich denke, ich vermisse etwas, aber ich kann es nicht herausfinden. Hier ist ein Bit des Codes:
// Create the apollo graphql client.
const apolloClient = new ApolloClient({
networkInterface: createNetworkInterface({
uri: `${process.env.GRAPHQL_ENDPOINT}`
}),
queryTransformer: addTypename,
dataIdFromObject: (result) => {
if (result.id && result.__typename) {
console.log(result.id, result.__typename); //can see this on console, seems okey
return result.__typename + result.id;
}
// Make sure to return null if this object doesn't have an ID
return null;
},
});
// home page query
// return an array of objects (Product)
export default graphql(gql`
query ProductsQuery {
products {
id, name
}
}
`)(Home);
//product page query
//return an object (Product)
export default graphql(gql`
query ProductQuery($productId: ID!) {
product(id: $productId) {
id, name, description, image
}
}
`,{
options: props => ({ variables: { productId: props.params.id } }),
props: ({ data: { loading, product } }) => ({
loading,
product,})
})(Product);
Und meine Konsole Ausgabe:
Um ein Update für Punkt 1 der Antwort zu geben: Diese Sache ist bereits verfügbar: http://dev.apollodata.com/react/cache-updates.html#cacheRedirect –
Ich glaube, dass 'returnPartialData' nicht mehr existiert und Stattdessen müssen Sie zwei Abfragen implementieren, eine Zusammenfassung und eine vollständige wie hier: http://dev.apollodata.com/react/migration.html#returnPartialData –