我有点想了解Apollo / GraphQL / Prisma / Yoga,但是我经常遇到的问题是,有很多事情在加倍进行。
说我有一个名为Client
的架构类型,它具有title
,firstName
,lastName
,email
,phone
,{{ 1}}等。
进行突变时,我需要输入所有字段:
address
然后转到客户的实际graphQL定义中,在其中我再次键入所有字段(两次!)
const result = await this.props.saveClientMutation({
variables: {
title,
firstName,
lastName,
email,
(etc)
}
})
然后将其转到服务器中的解析器(感谢分散操作符),然后转到我的数据库架构,在该数据库架构中,我第四次键入所有相同的字段。
这似乎是一个巨大的漏洞和不一致之处。我是否彻底误解了它是如何工作的,还是意味着要进行如此疯狂的重新输入?
答案 0 :(得分:2)
您可以尝试利用...
...但是据我所知,您仍然需要重新输入很多字段
接口至少应在类型不能正确实现的情况下引发错误,输入类型和片段应为您节省一些重新键入(如果它们可以重用)。
# Reusable type fields
interface IClient {
title: String
firstName: String
lastName: String
email: String
phone: String
address: String
}
type Client implements IClient {
# You must re-type interface items
title: String
firstName: String
lastName: String
email: String
phone: String
address: String
}
# Reusable mutation input variables
input ClientInput {
title: String
firstName: String
lastName: String
email: String
phone: String
address: String
}
# Reusable query fields
fragment ClientParts on Client {
firstName
lastName
}
# You can use your input type & fragment here
# although the input does change the structure from your example
mutation SAVE_CLIENT_MUTATION ($input: ClientInput!) {
login(input: $input) {
client {
...ClientParts
id
}
}
}