Javascript 在GraphQL查询中分组后如何限制和跳过标记列表页面的分页?

Javascript 在GraphQL查询中分组后如何限制和跳过标记列表页面的分页?,javascript,graphql,gatsby,Javascript,Graphql,Gatsby,我正在尝试对盖茨比网站中的博客标签列表页面进行分页,这些标签在MDX文件的frontmatter中定义: --- title: Blog Post Title date: 2020-05-20 tags: ["Markdown", "Gatsby", "JavaScript"] --- 使用页面context对象中传递的limit和skip可以轻松分页帖子: query Posts($limit: Int!, $skip: Int!) { allMdx( sort: { field

我正在尝试对盖茨比网站中的博客标签列表页面进行分页,这些标签在MDX文件的frontmatter中定义:

---
title: Blog Post Title
date: 2020-05-20
tags: ["Markdown", "Gatsby", "JavaScript"]
---
使用页面
context
对象中传递的
limit
skip
可以轻松分页帖子:

query Posts($limit: Int!, $skip: Int!) {
  allMdx(
    sort: { fields: frontmatter___date, order: DESC }
    limit: $limit
    skip: $skip
  ) {
    nodes {
      ...
  }
}
但是这不适用于标记列表页面的分页,这将在
allMdx
上限制
skip
,因此我们将在多个页面上获得相同的标记,
totalCount
将不是标记的总帖子,而是
限制
的帖子的总数

query Tags($limit: Int!, $skip: Int!) {
  allMdx(limit: $limit, skip: $skip) {
    group(field: frontmatter___tags) {
      fieldValue
      totalCount
    }
  }
}

那么,我如何在
而不是帖子上应用
限制
跳过
?我可以做的是获取每个页面的所有标记,并在组件中使用
limit
skip
,以仅显示当前页面的标记,但我认为这不是最好的方法。

在页面迭代期间(使用创建页面时),可以创建标记节点

  • 创建一个空的
    标记
    对象(在迭代之前,用于按名称寻址)
  • 循环中(每一页):
    • 在页面标签上循环(从frontmater
      标签开始):
      
      • 使用
        posts
        array属性创建
        tags[tag\u name]
        对象(如果不存在)
      • 将当前页面
        slug
        插入
        tags[tag\u name]。posts
最后(创建页面循环后),您将在以下结构中收集数据:

tags={
  "tag_1" : {
    posts [
      "slug_1",
      "slug_2"
    ]
  },
  "tag_2" : {
    posts [
      "slug_2",
      "slug_3",
      "slug_4"
    ]
  }
}
通过对该对象进行迭代,可以创建具有{tag_name,posts,post_count}的标记节点

在此之后,您可以创建
/tags
页面。您可以查询节点集合


你应该能够(在操场上测试)为标签索引页面分页,你可以显示标签名称、页面数量甚至页面链接(展开数量组件视图?
posts
post\u count
作为道具传递)。

阅读“盖茨比创建节点”。。。在页面创建(循环)过程中,您可以收集标记(创建节点)。。。然后创建标签pages@xadm谢谢你,我已经按照你的建议做了,现在我在
上下文中传递每个页面的标签,我过去只传递页码和总项目,但我仍然想知道如何使用GraphQL查询来做同样的事情。。。。。创建[标记]节点。。。frontmatter应提供每个页面的标签,无需传递separately@xadm你是在说邮政标签吗?我说的是一个
/tags
页面,它列出了所有标签和每个标签的帖子数量,这就是我要分页的页面。