AddMutation 使用中继现代 graphql

Posted

技术标签:

【中文标题】AddMutation 使用中继现代 graphql【英文标题】:AddMutation using relay modern graphql 【发布时间】:2018-08-23 03:55:59 【问题描述】:

我正在尝试使用 relay 添加用户,下面是我的架构文件schema.graphql

createUser(input: CreateUserInput!): UserPayload

input CreateUserInput 
clientMutationId: String
data: CreateUserData!


type CreateUserData 
firstName: String!
lastName: String!
password: String!
email: String


type UserPayload 
clientMutationId: String
node: User


type User 
id: ID!
firstName: String!
lastName: String!
email: String
password: String

下面是我的变异文件,AddUserMutation.js

const mutation = graphql`
  mutation AddUserMutation($input:  CreateUserInput!) 
  createUser(input: $input) 
      data 
        firstName
        lastName
        email
        password
      
    
  
`;

function commit(environment, node) 
  var firstName = node.fName;
  var lastName = node.lName;
  var email = node.signupEmail;
  var password = node.pwd;
  return commitMutation(environment, 
    mutation,
    variables: 
    input: 
       firstName,
       lastName,
       email,
       password
    ,
  ,onCompleted: (response, errors) => 
        console.log('Response received from server.',response)
      ,
      onError: err => console.error(err),
    ,
  );


export default  commit ;

但它给我这个错误

GraphQLParser:data 类型 UserPayload 上的未知字段。来源:文档AddUserMutation 文件:js/mutations/AddUserMutation.js

所以我在这里做错了什么,我搜索了许多网站仍然能够找到解决方案。有人可以帮助/澄清我吗?

【问题讨论】:

【参考方案1】:

根据您的架构,createUser 突变解析为 UserPayload 类型的对象。该类型在您的架构中只有两个字段:

type UserPayload 
  clientMutationId: String
  node: User

但是,您的查询实际上是在请求 data 字段,而 UserPayload 类型不存在该字段。您需要修改查询以请求正确的字段,例如:

const mutation = graphql`
  mutation AddUserMutation($input:  CreateUserInput!) 
  createUser(input: $input) 
      node: 
        firstName
        lastName
        email
        password
      
    
  
`;

您可能还需要更改架构,因为 CreateUserData 应该是 input 而不是 type

【讨论】:

完美。 .. :)

以上是关于AddMutation 使用中继现代 graphql的主要内容,如果未能解决你的问题,请参考以下文章

中继现代片段错误(期望对象包含数据....)

无论如何要检查中继是不是注入了graphql服务器?

在 QueryRenderer 中传递中继现代变量

中继现代碎片容器,道具不自动可用

将变量传递给现代中继中的片段容器

在没有查看器的情况下中继现代分页