GraphQL refetchQueries после мутации, this.props не обновляется - PullRequest
0 голосов
/ 05 октября 2018

Эта проблема не имеет для меня никакого смысла ... Я добавляю автора в базу данных, используя мутацию, подобную этой:

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

Тогда просто ...

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

По какой-то таинственной причине, когда я проверяю (this) в консоли, this.props.getAuthorsQuery.authors содержит моего добавленного автора, а (this.props) в консоли - нет.Новый автор успешно добавлен в раскрывающийся список в другом компоненте и находится в базе данных, но я не могу получить автора после мутации.Я хотел бы отфильтровать его ...

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

... но это просто дает мне пустой массив.Что я хочу сделать, так это вызвать другую мутацию, когда она будет завершена (добавление книги в отдельную коллекцию базы данных с новым добавленным автором в качестве ее автора).

Я получаю тот же результат, не используя awaitRefetchQueries, итакже используя onCompleted вместо .then ().Это мои текущие зависимости:

  "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"
  },

Спасибо!

1 Ответ

0 голосов
/ 25 марта 2019

Попробуйте передать awaitRefetchQueries непосредственно в мутацию и не вкладывать внутрь refetchQueries, например:

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