使用Apollo查询获取所有页面

时间:2018-02-20 06:25:05

标签: graphql apollo react-apollo

假设我的数据库中有500行。我想获得100页50行。以下是fetchMore请求的示例。

const fetchNextPage = (props) => {
  props.Query.fetchMore({
    query: gql(getRows),
    variables: {
      skip: props.Query.rows.length,
    },
    updateQuery: (previousResult, next) => {
      return {
        ...previousResult,
        rows: [...previousResult.rows, ...next.fetchMoreResult.rows],
      };
    },
  });
}

我不确定的是......

  1. 如何在没有其他用户操作的情况下获取所有页面?
  2. 由于我知道所需页面的总数,我该如何并行发送它们?

1 个答案:

答案 0 :(得分:1)

您可以通过一次操作实际执行此操作。使用aliases,您可以使用不同的参数多次请求相同的字段。

以下是官方explanation about aliases

在你的情况下,它将类似于:

  query GetAllPages {
      page1rows: rows(skip: 0, limit: 50) { # "skip" and "limit" are just regular variable names
          #...rowFields
      }
      page2rows: rows(skip: 50, limit: 50) {
          #...rowFields
      }
      #... etc.
  }

在此示例中,page1rowspage2rowsrows字段的别名。您可以选择其他别名。

请注意,skiplimit并不特别,它们是纯变量,它们的使用取决于服务器上的架构和解析器。我在您的代码中看到您使用skip,如果您知道,您将总是获得50行,那么limit就是多余的。

响应应该是这样的:

{
  "data": {
    "page1rows": [
      //... rows
    ],
    "page2rows": [
      //... rows
    ],
    //... etc.
  }
}

这种方式无需额外的用户操作,您可以立即获取所有网页,无需使用fetchMore