形成多个组件

时间:2018-04-20 12:03:42

标签: reactjs rest graphql apollo

我正在考虑从标准REST API架构转向graphQL。目前我有一个数据包装器,它在初始化后用用户信息和其他元数据预加载数据集。

有没有办法让apollo客户端构建多个组件请求的单个查询,并在加载组件后将其发送到graphQL服务器,而不是为每个组件发送单独的查询,并形成应用程序运行所必需的数据层?

最终有哪些其他选项可以做到这一点,并使用GraphQL使其更好,然后是当前的实现。

2 个答案:

答案 0 :(得分:1)

Apollo客户端中的查询有一个fetchPolicy选项,默认值为cache-first,这意味着Apollo会在尝试网络提取之前先尝试从本地缓存中读取。如果您有多个组件请求已经提取的数据,则不会发生网络呼叫。只需确保在查询中返回所请求数据的id字段,即使您的组件未使用它来确保正确缓存。

答案 1 :(得分:0)

假设您有以下graphql架构:

type Query {
    question(questionId: Int!): Question
    tag(tagId: Int!): Tag
}

type Question {
    questionId: Int!
    content: String!
}

type Tag {
    tagId: Int!
    tagName: String!
}

如果要在一个请求中检索2个对象,可以编写以下qraphql请求:

{
  question(questionId: 1) {
    questionId
    content
  }
  tag(tagId:1){
    tagId
    tagName
  }
}

作为输出,您将收到以下JSON:

{
  "data": {
    "question": {
      "questionId": 1,
      "content": "how to code in js?"
    },
    "tag": {
      "tagId": 1,
      "tagName": "js"
    }
  }
}