2017-09-13 46 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術語,對象)表單數據?在我看來,「形式」在這裏並不是真正重要的東西,但也許是一系列問題? –

相關問題