【问题标题】:GraphQL - Select different fields of a returned list per itemGraphQL - 为每个项目选择返回列表的不同字段
【发布时间】:2021-05-23 17:19:14
【问题描述】:

假设我有以下查询:

query getBooksQuery($userId: String) {
  getBooks(userId: $userId) {
    id
    description
    image
    user {
      email
      firstName
      lastName
      image
    }
  }
}

假设我必须显示一个包含用户书籍的列表,并在列表上方显示作者详细信息。因为我用userId 查询,所以我知道所有的书都属于同一个用户。 所以,我不想为列表中的每本书获取相同的用户详细信息,但在响应中只获取一次。 有没有办法声明我只想要第一本书的这些信息?

或者它是在响应中有两个对象的唯一方法,例如:

query getBooksQuery($userId: String) {
  getBooks(userId: $userId) {
    books {
      id
      description
      image
    }
    user {
      email
      firstName
      lastName
      image
    } 
  }
}

不幸的是,使用第二种解决方案,即使它在这一点上更清晰,也需要服务器端的工作来支持这个自定义查询。所以我在想使用当前的api是否仍然可行。 (我也可以做两个请求,一个给用户,一个给书籍,但是嗯......)

我正在使用没有中继的 Apollo,但我目前正在试验,所以如果在 Apollo 中不可行但可行,否则我仍然感兴趣

【问题讨论】:

    标签: graphql apollo-client


    【解决方案1】:

    您可以在一个请求中对 2 个“子查询”使用相同的参数

    query getBooksQuery($userId: String) {
      getBooks(userId: $userId) {
        books {
          id
          description
          image
        }
      }
      getUsers(userId: $userId) {
        user {
          email
          firstName
          lastName
          image
        } 
      }
    }
    

    【讨论】:

    • 这种不同解析器的组合方式改变了生活!难以置信的!突变也会发生同样的情况?
    • 是的,突变也是按顺序处理的
    猜你喜欢
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 2013-09-23
    • 1970-01-01
    相关资源
    最近更新 更多