我是否应该一遍又一遍地重新输入字段,还是我在想这是错的?

时间:2018-07-24 11:07:47

标签: graphql apollo prisma

我有点想了解Apollo / GraphQL / Prisma / Yoga,但是我经常遇到的问题是,有很多事情在加倍进行。

说我有一个名为Client的架构类型,它具有titlefirstNamelastNameemailphone,{{ 1}}等。

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

address

然后转到客户的实际graphQL定义中,在其中我再次键入所有字段(两次!)

const result = await this.props.saveClientMutation({
  variables: {
    title,
    firstName,
    lastName,
    email,
    (etc)
  }
})

然后将其转到服务器中的解析器(感谢分散操作符),然后转到我的数据库架构,在该数据库架构中,我第四次键入所有相同的字段。

这似乎是一个巨大的漏洞和不一致之处。我是否彻底误解了它是如何工作的,还是意味着要进行如此疯狂的重新输入?

1 个答案:

答案 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
      }
    }
}