J'ai du mal à trouver comment mettre à jour une liste d'éléments (dans le cache). Lorsqu'un nouvel élément est créé avec react-apollo
.
Le composant
n'est (dans mon cas) pas imbriqué dans le composant
. D'après ce que je peux comprendre, je dois mettre à jour le cache via la fonction de mise à jour dans mon composant createItemButton
.
Le problème est que lorsque j'essaye de store.readQuery ({query: GET_LIST_ITEMS, variables: ???})
pour obtenir la liste actuelle des éléments (pour ajouter mon élément récemment créé), ceci peut avoir des variables / filtres (pour la pagination, le tri, etc.).
Comment savoir quelle variable transmettre à la fonction store.readQuery
, y a-t-il une sorte de "dernières variables utilisées" autour de cela, ou avez-vous une autre suggestion sur la façon de résoudre ce problème problème?
3 Réponses :
Il s'agit d'un problème Apollo connu et l'équipe y travaille. Les options actuelles dont vous disposez sont disponibles dans ce message sur le support .
La suppression / mise à jour d'un élément pose également problème lorsque vous l'avez dans une liste avec des filtres ou une pagination.
Voici une référence de un problème ouvert sur Github à ce sujet a >
Cela semble fonctionner, mais un peu piraté pour accéder au cache.watches
Set
? : S
L'astuce est d'accéder aux variables du cache pour une requête donnée, de la sauvegarder et d'effectuer une refetch avec les variables de requête données. Dans mon cas après création d'un élément:
const refetchQueries = () => { if (variables && Object.keys(variables).length > 0) { return [{ query: GET_TASKS, variables }]; } return []; }
La fonction mutation
update
:
let variables; const update = (cache, { data }) => { if (data && data.createTask && data.createTask.task) { variables = getGraphqlCacheVariables('GetTasks', cache); } }
Et la fonction refetchQueries
:
export const getGraphqlCacheVariables = (queryName, cache) => { if (cache.watches) { const watch = [...cache.watches].find(w => !!w.query[queryName]); if (watch) { return watch.variables; } } };
Bot les fonctions update et refetchQueries devraient avoir accès aux variables
variable
L'avantage par rapport à la solution dans le Article moyen , est que vous ne supprimez pas les données mises en cache pour une requête donnée (GET_TASKS) avec différentes variables. p >
Apollo fournit maintenant une nouvelle directive qui permet d'ignorer certaines variables lors de l'interrogation du cache. Vérifiez-le ici . Je l'ai utilisé pour ignorer mes paramètres de pagination changeants.
Je suggère d'ajouter des extraits de code et des exemples. Peut-être un lien vers une démonstration / un exemple que les gens peuvent utiliser pour répondre à votre question. ( stackoverflow.com/questions/21285923/… a>) pourrait aider. Mais les exemples et les extraits de code sont les meilleures pratiques lorsque vous demandez sur SO.