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 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> et plus loin dans le composant enveloppé, je ferai quelque chose comme ça p> Ajouter Code> ou un
Supprimer CODE> FONCTIONNEMENT. 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)
}
}}
3 Réponses :
Tout est possible mais coûte généralement du temps et de l'argent;) ... dans ce cas simplicité, lisibilité, gestion. p>
mutation commune, f.e. Nommé "changement" avec Bien sûr, nécessite un changement d'API - vous avez besoin d'un nouveau résolveur. P>
Utilisation de Cette solution ne nécessite pas de changement d'API. P> changeType code> paramètre. p>
2e solution h2>
graphql-tag code> Vous pouvez construire n'importe quelle requête de la chaîne. Faites une inspiration de Cette réponse - avec
Je pense qu'à deux composants de mutation code> code> code> n'a pas de sens. Si je comprends bien correctement, il peut y avoir deux façons de résoudre votre problème. P>
Client.Mutate CODE> Fonction Pour faire une mutation manuelle en fonction de l'état et de la définition mutation code> et variables code> 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. LI>
- à l'aide d'un seul
Mutation Code> Composant Intérieur Render Code> Méthode de votre composant et paramètre Mutation code> et variables code> basé sur le état code> variable. LI>
ol>
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. p>
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. P>
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? p>
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. P>