2017-09-13 64 views
1

我的应用程序的目标是使用户能够保存和调用的形式填写并编辑列表。一个用户将有多种形式,一个表单将由其自己的几个字段组成。传递自定义类型的列表,以一个GraphQL突变

如果设置我有我的类型像这样,例如:

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工作的突变。我不断收到此错误:

Error: Mutation.saveForm(form:) argument type must be Input Type but got: FormType.

...这我的研究告诉我意味着FormType需要一个GraphQLInputObjectType。当我相应地改变它时,我只是得到错误:

Error: Mutation.saveForm(form:) argument type must be Output Type but got: FormType.

所以没有什么变化。有没有人知道这个问题的一个有效的例子?

回答

0

您所看到的问题是因为虽然您已将输入类型正确更改为GraphQLInputObjectType,该字段将UserType.forms字段的类型也更改为输入类型 - 请记住UserType是输出类型。在这里,您需要制作一个FormType以及一个FormInputType,然后在适当的位置使用它们。

另外:为什么你需要一个形成完整的输入类型?只是通过身份证不是很好吗?或者,如果意图是让FormType代表表单数据,为什么它需要一个ID?另外,也许它可以更好地命名为FormData

最后,虽然我相信这提供了一个答案,你的问题并没有完全切断提供+ pasteable代码最小的,完整的和可核查的例子,这样我可以很容易地检查。

+0

因此,而不是试图FormTypes对象的列表来传递,我应该只是通过他们的ID列表?这很有道理,不会让我错误的GraphQLList。 有关表单输入类型最初的想法是因为形式本身是非常复杂的,我想从几个较小的类型创建它,类似于我的反应的组分的结构如何。我知道如何将表单类型传递给用户,然后我可以将相同的逻辑应用于表单子类型。 – JayBauer

+0

我想我在这里错过了一些东西。在我将它传递给'User'之前,我不需要单独的变异来保存表单(从而生成'ID')吗? 我知道我可能失去了一些东西,但我一直在对这个没有任何进展了几天现在它开始推动我逼疯了。如果我在这一点上说的话似乎很明显,我很抱歉。任何我可以进一步澄清,使我更容易理解,我会提供。 – JayBauer

+0

没有理由道歉!这仍然是相当尖端的东西。我说得对,原来的标题“传递一个自定义类型列表”并不完全正确吗?而实际上你需要传递一组(或者以GraphQL术语,对象)表单数据?在我看来,“形式”在这里并不是真正重要的东西,但也许是一系列问题? –

相关问题