2 votes

GraphQL refetchQueries après mutation, this.props non mis à jour

Ce problème n'a aucun sens pour moi du tout... J'ajoute un auteur à une base de données en utilisant une mutation comme ceci :

this.props
      .addAuthorMutation({
        variables: {
          name: this.state.name,
          age: this.state.age
        },
        refetchQueries: [
          {
            query: getAuthorsQuery,
            variables: {
              awaitRefetchQueries: true
            }
          }
        ]
      })
      .then(() => this.submitBookAlso());

Ensuite simplement...

  submitBookAlso() {
    console.log(this);
    console.log(this.props);
  }

Pour une raison mystérieuse, lorsque j'inspecte (this) dans la console, this.props.getAuthorsQuery.authors contient mon auteur ajouté, cependant, (this.props) dans la console ne le contient pas. Le nouvel auteur est ajouté à un menu déroulant dans un autre composant avec succès, et est présent dans la base de données, mais je ne parviens pas à obtenir l'auteur après la mutation. Je voudrais le filtrer...

let author = this.props.getAuthorsQuery.authors.filter(
  author => this.state.name === author.name
);
console.log(author);

...mais cela me donne simplement un tableau vide. Ce que je veux faire est déclencher une autre mutation lorsque celle-ci est terminée (ajout d'un livre à une collection de bases de données séparée avec le nouvel auteur ajouté en tant qu'auteur).

J'obtiens le même résultat sans utiliser awaitRefetchQueries, et également en utilisant onCompleted au lieu de .then(). Voici mes dépendances actuelles :

  "dependencies": {
    "apollo-boost": "^0.1.16",
    "graphql": "^14.0.2",
    "react": "^16.5.2",
    "react-apollo": "^2.2.4",
    "react-dom": "^16.5.2",
    "react-scripts": "2.0.3"
  },

Merci !

3voto

chrxtina Points 33

Essayez de passer awaitRefetchQueries directement à la mutation et non pas imbriqué dans refetchQueries comme ceci :

this.props
      .addAuthorMutation({
        variables: {
          name: this.state.name,
          age: this.state.age
        },
        awaitRefetchQueries: true,
        refetchQueries: [
          {
            query: getAuthorsQuery
          }
        ]
      })
      .then(() => this.submitBookAlso());

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X