如何从 GraphQL 突变返回数据?

Posted

技术标签:

【中文标题】如何从 GraphQL 突变返回数据?【英文标题】:How return data from a GraphQL mutation? 【发布时间】:2018-06-06 19:39:18 【问题描述】:

我下面有以下redux-form...如何获取console.log从graphQL突变结果数据中获取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 );
      ,
    ),
  
);

谢谢!节日快乐

【问题讨论】:

不知道这是否是一个错字,但您没有在引号之外记录结果对象。 @AarohMankad 谢谢,但这只是为了展示我正在尝试做的事情。我会更新...有什么想法吗? 突变“signup”的 typedef 是否有返回值。例如: signup(authProvider: authProviderInput) : String 或类似的东西。例如: addAlley(alley: AlleyInput): Alley 这将添加新的胡同并返回胡同。 返回的是“字符串或类似的东西”吗? 【参考方案1】:

在我看来,它应该是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===
  

`

如果您对服务器有图形访问权限:

点击右上角的DOCS按钮,然后 点击mutation: Mutation 那么您应该会看到如下内容:

signup(authProvider: AuthProviderNewcomerData!): User

那么你知道你会收到一个User 回复。

【讨论】:

以上是关于如何从 GraphQL 突变返回数据?的主要内容,如果未能解决你的问题,请参考以下文章

Graphql 突变返回 Post 400 错误,不知道如何解决

如何从graphql突变返回令牌

从 Promise 返回数据到 GraphQL

我必须在带有 Sequelize 的 GraphQL 突变中返回啥?

graphql 突变不返回嵌套字段

apollo graphql 突变应该返回哪个值?