0
votes

Réagir Apollo - Multiples mutations

J'utilise React-Appollo@2.5.6

J'ai un composant, lorsque vous cliquez dessus, il sera basé sur "Sélectionner" état et émettra un Ajouter Code> ou un Supprimer CODE> FONCTIONNEMENT. P>

Je fais actuellement cela pour que 2 mutations fonctionne injectée à mon composant. Est-ce la bonne façon de le faire? Suis-je capable d'utiliser une mutation (hoc) au lieu de plusieurs? P> xxx pré>

et plus loin dans le composant enveloppé, je ferai quelque chose comme ça p>

                        onClick={(e) => {
                          e.preventDefault()

                          const input = {
                            variables: {
                              userId: user.id,
                              stuffId: stuff.id,
                            },
                          }

                          // Based on selected state, I will call either add or remove
                          if (isSelected) {
                            removeStuff(input)
                          } else {
                            addStuff(input)
                          }
                        }}


0 commentaires

3 Réponses :


0
votes

Tout est possible mais coûte généralement du temps et de l'argent;) ... dans ce cas simplicité, lisibilité, gestion.

1ère solution

mutation commune, f.e. Nommé "changement" avec changeType paramètre.

Bien sûr, nécessite un changement d'API - vous avez besoin d'un nouveau résolveur.

2e solution

Utilisation de graphql-tag Vous pouvez construire n'importe quelle requête de la chaîne. Faites une inspiration de Cette réponse - avec 'graphql classique hoc' motif.

Cette solution ne nécessite pas de changement d'API.


0 commentaires

0
votes

Je pense qu'à deux composants de mutation n'a pas de sens. Si je comprends bien correctement, il peut y avoir deux façons de résoudre votre problème.

  1. Utilisation du client APOLLO Client.Mutate Fonction Pour faire une mutation manuelle en fonction de l'état et de la définition mutation et variables basé sur le nouvel état . Pour accéder au client dans le composant actuel, vous devez transmettre le client à partir du composant parent où il a été créé avec des composants enfants où se déroulent la mutation.
  2. à l'aide d'un seul Mutation Composant Intérieur Render Méthode de votre composant et paramètre Mutation et variables basé sur le état variable.

0 commentaires

0
votes

L'approche que vous utilisez travaille comme vous l'avez dit, mais cela ressemble à vous déléguez une logique à l'interface utilisateur qui devrait être traitée par le service sous-jacent basé sur l'entrée issue.

Je pense que vous devez créer une seule mutation pour add_stuff et supprimer_stuff, je créerais la mutation add_or_remove_stuff et choisissez le comportement Ajouter ou supprimer un comportement sur le résolveur.

Avoir une mutation est plus facile à maintenir / développer / à comprendre si la logique nécessite quelque chose d'autre en plus d'ajouter / supprimer, par exemple si vous devez choisir Ajouter / Supprimer / Mettre à jour / Vérifier / transformer, souhaitez-vous nier 5 mutations?

Dans le cas précédent, la mutation unique pourrait être nommée multi_handle_stuff, et seulement une mutation appelée de l'interface utilisateur.


0 commentaires