我应该一遍又一遍地重新输入我的字段,还是我认为这是错误的?
Am I supposed to re-type my fields over and over, or am I thinking though this wrong?
我有点想 Apollo/GraphQL/Prisma/瑜伽,但我总是卡住的一点是,有太多的加倍正在进行.
假设我有一个名为 Client
的模式类型,它有 title
、firstName
、lastName
、email
、phone
、 address
等等等等
当我进行突变时,我需要输入所有字段:
const result = await this.props.saveClientMutation({
variables: {
title,
firstName,
lastName,
email,
(etc)
}
})
然后这会转到我客户端中的实际 graphQL 定义,在那里我再次输入所有字段(两次!)
mutation SAVE_CLIENT_MUTATION ($title: String!, $firstName: String!, $lastName: String!, $email: String!) {
login(title: $title, firstName: $firstName, lastName: $lastName, email: $email) {
client {
id
firstName
lastName
}
}
}
这然后转到我服务器中的解析器(感谢上帝提供了传播运算符),然后转到我的数据库架构,我基本上第四次键入所有相同的字段。
这似乎是一个巨大的错误和不一致的表面积。我是否完全误解了这是如何工作的,还是意味着要进行如此疯狂的重新输入?
您可以尝试利用...
- interfaces 定义具有共享字段的类型
- input types 用于具有共享字段的突变
- fragments 对于具有共享字段的查询
...但据我所知,您仍然需要重新输入很多字段
接口至少在类型未正确实现时应抛出错误,输入类型和片段应避免您重新输入(如果它们可以重用)。
# 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
}
}
}
我有点想 Apollo/GraphQL/Prisma/瑜伽,但我总是卡住的一点是,有太多的加倍正在进行.
假设我有一个名为 Client
的模式类型,它有 title
、firstName
、lastName
、email
、phone
、 address
等等等等
当我进行突变时,我需要输入所有字段:
const result = await this.props.saveClientMutation({
variables: {
title,
firstName,
lastName,
email,
(etc)
}
})
然后这会转到我客户端中的实际 graphQL 定义,在那里我再次输入所有字段(两次!)
mutation SAVE_CLIENT_MUTATION ($title: String!, $firstName: String!, $lastName: String!, $email: String!) {
login(title: $title, firstName: $firstName, lastName: $lastName, email: $email) {
client {
id
firstName
lastName
}
}
}
这然后转到我服务器中的解析器(感谢上帝提供了传播运算符),然后转到我的数据库架构,我基本上第四次键入所有相同的字段。
这似乎是一个巨大的错误和不一致的表面积。我是否完全误解了这是如何工作的,还是意味着要进行如此疯狂的重新输入?
您可以尝试利用...
- interfaces 定义具有共享字段的类型
- input types 用于具有共享字段的突变
- fragments 对于具有共享字段的查询
...但据我所知,您仍然需要重新输入很多字段
接口至少在类型未正确实现时应抛出错误,输入类型和片段应避免您重新输入(如果它们可以重用)。
# 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
}
}
}