Javascript 在GraphQL查询中分组后如何限制和跳过标记列表页面的分页?
我正在尝试对盖茨比网站中的博客标签列表页面进行分页,这些标签在MDX文件的frontmatter中定义: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
---
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
页面,它列出了所有标签和每个标签的帖子数量,这就是我要分页的页面。