突变后GraphQL refetchQueries,此属性未更新

时间:2018-10-05 08:45:11

标签: javascript reactjs graphql apollo react-apollo

这个问题对我完全没有意义...我正在使用这样的突变将作者添加到数据库中:

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 :(得分:0)

尝试将awaitRefetchQueries直接传递给突变,而不是像这样嵌套在refetchQueries内:

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