我应该一遍又一遍地重新输入我的字段,还是我认为这是错误的?
Posted
技术标签:
【中文标题】我应该一遍又一遍地重新输入我的字段,还是我认为这是错误的?【英文标题】:Am I supposed to re-type my fields over and over, or am I thinking though this wrong? 【发布时间】:2018-12-31 23:38:00 【问题描述】:我有点想了解 Apollo/GraphQL/Prisma/Yoga,但我总是卡住的一点是,有太多的加倍正在发生。
假设我有一个名为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
然后这会转到我服务器中的解析器(感谢上帝的传播运算符),然后转到我的数据库模式,我基本上在其中第四次键入所有相同的字段。
这似乎是错误和不一致的巨大表面区域。我是否完全误解了这是如何工作的,或者是否意味着要进行如此疯狂的重新输入?
【问题讨论】:
【参考方案1】:你可以尝试使用...
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
【讨论】:
干杯爱德华,这一切都说得通。以上是关于我应该一遍又一遍地重新输入我的字段,还是我认为这是错误的?的主要内容,如果未能解决你的问题,请参考以下文章
DAO Recordsets:如果我一遍又一遍地重用同一个名字,我应该关闭并设置为空吗?