繁体   English   中英

将自定义类型列表传递给GraphQL突变

[英]Passing a list of custom types to a GraphQL mutation

我的应用程序的目标是使用户能够保存和调用要填写和编辑的表单列表。 一个用户将具有多种形式,而一个表单将由其自己的多个字段组成。

例如,如果我的类型设置如下:

const FormType = new GraphQLObjectType({
  name: 'FormType',
  fields: {
    id: { type: GraphQLID },
    name: { type: GraphQLString },
    email: { type: GraphQLString }
  }
});
const UserType = new GraphQLObjectType({
  name: 'UserType',
  fields: {
    id: { type: GraphQLID },
    email: { type: GraphQLString },
    firstName: { type: GraphQLString, default: '' },
    lastName: { type: GraphQLString, default: '' },
    phone: { type: GraphQLString, default: '' },
    forms: { type: new GraphQLList(FormType) }
  }
});

我的变异是这样的:

const mutation = new GraphQLObjectType({
  name: 'Mutation',
  fields: {
    saveForm: {
      type: UserType,
      args: {
        userID: { type: GraphQLID },
        form: { type: FormType } // ???
      },
      resolve(parentValue, { userID, form }) {
        // I'll figure out what to do here when the time comes
      }
    }
  }
});

我似乎无法创建与GraphQLList一起使用的突变。 我不断收到此错误:

错误:Mutation.saveForm(form :)参数类型必须为Input Type,但得到:FormType。

...研究表明, FormType必须是GraphQLInputObjectType 当我相应地更改它时,我只会收到错误:

错误:Mutation.saveForm(form :)参数类型必须为Output Type,但得到:FormType。

所以什么都没有真正改变。 有人知道这个问题的可行例子吗?

您看到的问题是,当您将输入类型正确更改为GraphQLInputObjectType ,它也会将UserType.forms字段的UserType.forms也更改为输入类型-请记住UserType是输出类型。 在这里,您需要制作一个FormType以及一个FormInputType ,并在适当的地方使用它们。

另外:为什么您需要表单的完整输入类型? 仅传递ID是否会同样有效? 或者,如果要用FormType表示表单数据,为什么它需要ID? 另外,也许它可以更好地命名为FormData

最后,虽然我相信这可以提供答案,但是您的问题并没有提供一个完整,可剪切和可粘贴的代码,仅提供了一个最小,完整和可验证的示例,因此我可以轻松地进行检查。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM