我有一个将提交表单数据的突变,此数据可能因您填写的表单而异。
表单将很多,它们将共享相同的“步骤”(每个表单由 1 个或多个页面/步骤组成)。
所以,我们可能有这些可重用的步骤:
而这两种形式:
genericInfo
):姓名 + 出生日期whatYouEat
): 名字和姓氏 + 喜欢的水果我需要一种方法来进行单个突变,它允许定义表单名称,并采用 data
根据此类表单名称需要验证对象。
例如,如果我称这个突变为:
submitForm(formName: $formName, formData: $formData) {
resultMessage
}
Run Code Online (Sandbox Code Playgroud)
使用formName
set togenericInfo
和formData
set to { nameAndSurname: 'Foo Bar', favFruit: 'apple' }
,它应该抛出一个错误,因为genericInfo
不期望favFruit
,但是dateOfBirth
。
这可以用 GraphQL 实现吗?有没有更好的方法来这里?
GraphQL 不直接允许这样做。输入对象类型具有固定结构,并且没有条件验证(内置;您的解析器函数可能会根据其自身的检查产生错误,这些检查比模式中的内容更丰富)。
我见过的最常见的模式采用Relay GraphQL 突变约定(即使您不希望您的客户使用 Relay)。每个可能的操作都有一个突变(在您的情况下,每个提交的表单有一个突变)和每个突变的不同输入对象类型。
另请注意,输入对象类型可以嵌套,因此在您的示例中,您可以编写
input Name {
givenName: String!
surname: String!
}
input Fruit {
name: String!
}
input WhatYouEatInput {
name: Name!
fruit: Fruit!
}
mutation {
whatYouEat(input: WhatYouEatInput!): WhatYouEatPayload!
}
Run Code Online (Sandbox Code Playgroud)
这将允许跨不同的突变类型重用模式的公共部分。
归档时间: |
|
查看次数: |
5215 次 |
最近记录: |