如何使用GraphQL同时进行查询和变异?

时间:2018-10-31 15:54:35

标签: reactjs react-native graphql

大家好,我是这个Apollo-GraphQL的新成员,我正在尝试使用我的React Native应用程序实现我的服务器。

当我尝试构建密码更改功能时,出现以下错误this.props.resetPassword is not a function. (In 'this.props.resetPassword(_id, password)', 'this.props.resetPassword' is undefined)

我的代码如下

toSend() {
    const { _id } = this.props.data.me;
    const { password } = this.state;
    console.log(_id, password)
    this.props
        .resetPassword(_id, password)
        .then(({ data }) => {
            return console.log(data);
        })
}

这是我的查询和突变

export default graphql(
    gql`
    query me {
      me {
        _id
      }
    }
  `,
    gql`
    mutation resetPassword($_id: String!, $password: String!) {
      resetPassword(_id: $_id, password: $password) {
        _id
      }
    }
  `,
    {
        props: ({ mutate }) => ({
            resetPassword: (_id, password) => mutate({ variables: { _id, password } }),
        }),
    },
)(PasswordChange);

1 个答案:

答案 0 :(得分:0)

如果您使用的是graphql HOC,则需要使用compose来组合多个查询/变异。例如:

const mutationConfig = {
  props: ({mutate, ownProps}) => ({
    resetPassword: (_id, password) => mutate({ variables: { _id, password } }),
    ...ownProps,
  })
}

export default compose(
  graphql(YOUR_QUERY, { name: 'createTodo' }),
  graphql(YOUR_MUTATION, mutationConfig),
)(MyComponent);

请记住,HOC默认会传递它收到的所有道具,但是如果您在配置中为props提供了一个功能,那么您就可以利用ownProps来做到这一点。另外,在使用compose时,如果HOC的任何一个依赖于其他道具,则HOC的顺序很重要。这意味着,只要您的查询排在compose内部,您就可以在突变的配置中使用查询HOC的data