graphql - 如何正确地将 Graphql 查询结果分类,例如按类别组织博客文章
问题描述
我正在为一位自由作家在 Gatsby 网站上工作。我使用理智作为 CMS。我正在努力按类别而不是按日期对他们发表的作品进行分类和组织。如您所见,我的代码有效,但不是很健壮。我在想有一种更有效的方法来完成我想做的事情。我认为对于在反应中嵌套循环更有经验的人来说,答案在这里是显而易见的。
我一直在尝试各种循环,并在尝试嵌套循环以捕获cats
变量和writing
变量的结果时不断遇到问题。
const publishedList = () => {
const data = useStaticQuery(graphql`
query {
allSanityPublishedWork {
nodes {
title
category
id
publishedBy
publishedDate
}
distinct(field: category)
}
}
`);
const writing = data.allSanityPublishedWork.nodes;
const cats = data.allSanityPublishedWork.distinct;
return (
<div>
<h3>{cats[0]}</h3>
{writing
.filter(pub => pub.category === cats[0])
.map(pub => (
<p>{pub.title}</p>
))}
<h3>{cats[1]}</h3>
{writing
.filter(pub => pub.category === cats[1])
.map(pub => (
<p>{pub.title}</p>
))}
<h3>{cats[2]}</h3>
{writing
.filter(pub => pub.category === cats[2])
.map(pub => (
<p>{pub.title}</p>
))}
</div>
);
};
export default publishedList;
正如您在我的代码示例中看到的那样,我依赖于指定数组编号,因此cats[0]
这不是实现此目的的可靠方法,因为我需要知道可能随时间变化的类别的确切数量。应该有一种方法可以遍历此查询的结果,并以比我上面所做的更有效和更有弹性的方式执行以下操作:
类别标题
- 文章名称、日期、发表者
- 文章名称、日期、发表者
- 文章名称、日期、发表者
类别标题
- 文章名称、日期、发表者
- 文章名称、日期、发表者
- 文章名称、日期、发表者
类别标题
- 文章名称、日期、发表者
- 文章名称、日期、发表者
- 文章名称、日期、发表者
等等。
解决方案
你在找这个吗?
cats.map(cat => (
<>
<h3>{cat}</h3>
{writing
.filter(pub => pub.category === cat)
.map(pub => (
<p>{pub.title}</p>
))}
</>
))
尽管如此,如果您可以影响 GraphQL 模式的外观,我强烈建议您以更适合您需求的方式设计模式。
推荐阅读
- python - python 自定义链表是否在每个节点中携带所有属性?
- c# - 正确控制 UWP 中的渲染
- r - 在 R 中将 2 个数据框加在一起而不会丢失列
- linux - 'xfdesktop' 命令在终端中返回错误
- azure-devops - 提交错误时如何区分 Azure DevOps (VSTS) 中的新功能和回归缺陷
- c++ - 加载文件在编译的 exe 中有效,但在 Visual Studio 中运行时无效
- nativescript - NativeScript - 迁移项目结构
- kubernetes - 无法从 GKE 连接到 GCE
- python - Pandas:按日期范围/确切 ID 过滤
- c# - 列为类中的属性