0

在我的 redux-form onSubmit 中的一个组件中,我有以下内容:

const result = await helloSignup(values);
console.log(result);

helloSignup 正在按预期改变数据库,但const result当前记录为undefined

为什么?

我的 HOC/突变 helloSignup:

export const HELLO_SIGNUP_MUTATION = gql`
mutation (
  $email: String!
  $code: String!
) {
  signup(authProvider: {
    emailAndCode: {
      email: $email
      code: $code
    }
  }) {
    token
    user {
      id
    }
  }
}
`;

export default graphql(
  HELLO_SIGNUP_MUTATION,
  {
    props: ({ mutate }) => ({
      emailAndCodeSignup: async (variables) => {
        const { data } = await mutate({ variables });
        const { token } = data.signup;
      },
    }),
  }
);

使用 GraphiQL,我可以看到我的 graphql 突变返回了所需的结果:

{
  "data": {
    "signup": {
      "token": "xxx",
      "user": {
        "id": "16"
      }
    }
  }
}

如果 GraphiQL 在变异后得到了想要的结果,为什么上面的控制台没有记录结果?

4

1 回答 1

1

React-Apollo 为客户端查询和突变提供了一个 HOC,称为withApollo.

这个签名是这样的:

withApollo(MyForm)

https://www.apollographql.com/docs/react/basics/setup.html#withApollo

它向 MyForm 组件添加了一个 'client' 属性。在提交表单时,你会想要访问这个道具,并从那里调用突变。因此,在您的表单提交处理程序中,您最终会得到如下内容:

https://www.apollographql.com/docs/react/basics/mutations.html#basics

onSubmit() {
  const { client } = this.props
  const options = {} // your mutation options
  // mutations ands queries return promises, 
  // so you must wait for their completion before accessing data
  client.mutate(
    HELLO_SIGNUP_MUTATION, 
    options
   ).then(({ data }) => (
     console.log('got data', data);
   )
  }
}

从 API 返回的数据应该在哪里

于 2017-12-27T03:00:24.017 回答