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

标签 graphql apollo prisma

我有点想了解 Apollo/GraphQL/Prisma/ Yaga ,但我总是被困住的一点是,有太多的双重 Action 在进行。

假设我有一个名为 Client 的模式类型,它有 titlefirstNamelastName电子邮件电话地址等。

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

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

然后这会转到我服务器中的解析器(感谢上帝提供了传播运算符),然后转到我的数据库架构,我基本上在其中第四次键入所有相同的字段。

这看起来像是一个巨大的错误和不一致的表面区域。我是否完全误解了这是如何工作的,还是意味着要进行如此疯狂的重新输入?

最佳答案

你可以尝试利用...

...但据我所知,您仍然需要重新输入很多字段

接口(interface)至少在类型未正确实现时应抛出错误,输入类型和片段应避免您重新输入(如果它们可以重用)。

# 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
      }
    }
}

关于graphql - 我应该一遍又一遍地重新输入我的字段,还是我认为这是错误的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51497073/

相关文章:

database - Prisma 模式中的一对多自相关

graphql - 为 GraphQL 中的字段分配多种类型

mysql - 如何使用 sequelize 和 Graphql 正确解析查询 MySql

javascript - 在 Apollo 中使用 graphql 的片段时遇到问题

javascript - 在组件端处理 Apollo 错误

javascript - meteor apollo graphql/sequelize 缓存查询结果以避免多次相同的查询

graphql - 如何在GraphQL查询中使用distinct?

reactjs - 如何修复 `Warning: Text content did not match. Server: "一些数据“客户端: "Loading..."`

database - 如何在 Prisma 模式中表示额外的关系列?

node.js - postgreSQL 的 prisma 部署命令