J'utilise apollo graphql dans mon application React. Disons que j'ai la requête suivante:
query ListQuery($filter: String!) {
items(filter: $filter) {
id
name
}
}
Cette requête me permet d'interroger une liste d'éléments à l'aide d'un filtre. Supposons que j'utilise la chaîne de filtrage A, puis la chaîne de filtrage B. Le cache contient désormais deux entrées: ListQuery (A) et ListQuery (B).
Supposons maintenant que j'utilise une mutation pour ajouter un nouvel élément. Comment puis-je supprimer toutes les requêtes mises en cache du cache? Dans ce cas, je souhaite supprimer à la fois ListQuery (A) et ListQuery (B) du cache.
Comment puis-je accomplir cela?
Dans votre cas, vous pouvez utiliser la méthode apollo client.resetStore ();
Il effacera le cache précédent, puis chargera les requêtes actives.
Il semble que ce dont vous avez besoin soit refetchQueries
option/prop à définir sur un tableau de chaînes de noms de requête. La documentation indique que:
Si options.refetchQueries est un tableau de chaînes, Apollo Client recherchera toutes les requêtes portant les mêmes noms que les chaînes fournies et récupérera ces requêtes avec leurs variables actuelles.
Ainsi, comme exemple d'utilisation de graphql
HOC, vous pouvez essayer de faire:
function SomeComponent(props) {
const performMutation = () => {
props.doStuff({ refetchQueries: ["ListQuery"] })
.then(/* ... */)
.catch(/* ... */)
}
return (/* ... */)
}
export default graphql(DO_STUFF, { name: "doStuff" })(SomeComponent)
Ou avec le composant Mutation
:
function SomeComponent(props) {
return (
<Mutation
mutation={DO_STUFF}
refetchQueries={mutationResult => ["ListQuery"]}>
{(doStuff, { loading, error }) => {
/* ... */
}}
</Mutation>
);
}
Si cela ne fait pas ce dont vous avez besoin, il y a aussi un solution de contournement utilisant l'option update
.
J'espère que cela t'aides.