我应该一遍又一遍地重新输入我的字段,还是我认为这是错误的?

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 的架构类型,它有titlefirstNamelastNameemailphoneaddress 等。

当我进行突变时,我需要输入所有字段:

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
      
    

【讨论】:

干杯爱德华,这一切都说得通。

以上是关于我应该一遍又一遍地重新输入我的字段,还是我认为这是错误的?的主要内容,如果未能解决你的问题,请参考以下文章

CSS轮播只一遍又一遍地显示最后一张图片

Google Cloud Run 一遍又一遍地错误运行

一遍又一遍地创建 PHP MVC 控制器

DAO Recordsets:如果我一遍又一遍地重用同一个名字,我应该关闭并设置为空吗?

为啥我的 axios 使用 React.useEffect 一遍又一遍地从 Rails 后端获取调用?

Listview一遍又一遍地只显示最后一项