如何从GraphQL mutation返回数据?

3

我有以下的redux-form... 我该如何使用console.log获取graphQL mutation结果数据中的user.id?

const withForm = compose(
  withMySignupMutation,
  reduxForm({
    ...
    onSubmit: async (values, dispatch, {
      mySignup,
    }) => {
      try {
        const result = await mySignup(values);
        console.log('I Need user.id here');
        console.log(result.user.id);
        ...

withMySignupMutation

import { graphql } from 'react-apollo';
import gql from 'graphql-tag';

export const SIGNUP_MUTATION = gql`
mutation (
  $email: String!
  $name: String!
) {
  signup(authProvider: {
    mySignup: {
      email: $email
      name: $name
    }
  }) {
    token
  }
}
`;

export default graphql(
  SIGNUP_MUTATION,
  {
    props: ({ mutate }) => ({
      mySignup: async (variables) => {
        const { data } = await mutate({ variables });
      },
    }),
  }
);

谢谢!节日快乐。

1
不知道这是否是打字错误,但您没有在引号外记录结果对象。 - Aaroh Mankad
@AarohMankad 谢谢,但那只是为了展示我想做的事情。我会更新... 有什么想法吗? - AnnaSm
"mutation"中的"signup"有返回值的类型定义吗?例如:signup(authProvider: authProviderInput) : String之类的东西。同样的例子还有:addAlley(alley: AlleyInput): Alley,这将添加新的小巷并返回小巷。 - Norm Crandall
返回的是“字符串或类似的东西”吗? - AnnaSm
1个回答

0
在我看来,应该是result.data.signup.id,但我们需要查看解析器和模式定义。这取决于解析器返回的内容。它应该是一个用户类型。
无论如何,您必须在您的变异中请求id,否则它将无法解决:
export const SIGNUP_MUTATION = gql`
mutation (
  $email: String!
  $name: String!
) {
  signup(authProvider: {
    mySignup: {
      email: $email
      name: $name
    }
  }) {
    token
    id ### <===HERE===
  }
}
`

如果您有GraphiQL访问服务器:

  • 点击右上角的DOCS按钮,然后
  • 点击mutation: Mutation
  • 然后您应该会看到类似于:

signup(authProvider: AuthProviderNewcomerData!): User

那么您就知道您将会得到一个User


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接