【发布时间】:2020-07-13 21:58:29
【问题描述】:
我正在使用 Gatsby 编写博客,并尝试根据用户点击的标签生成页面。
当用户点击标签时,他应该被重定向到显示带有该标签的文章列表的页面。
我创建了一个执行此操作的查询。但是,我的 GraphQL 查询在我的 GraphQL 编辑器中有效,但在我的反应代码中无效。它在代码中返回一个空数组,但是当我在 Graphql 编辑器中运行查询时,它会返回预期的结果。
import React from "react"
import ArticleCard from "../articleCard/ArticleCard"
import Pagination from "../pagination/Pagination"
import articlesStyles from "./Articles.module.scss"
import { useStaticQuery, graphql } from "gatsby"
const Articles = ({ pageTitle }) => {
const blogPosts = useStaticQuery(graphql`
query($tag: String) {
allMarkdownRemark(
sort: { order: DESC, fields: [frontmatter___publish_date] },
filter: { frontmatter: { tags: { in: [$tag] } } }
) {
nodes {
frontmatter {
title
publish_date
imageUrl
author
category
}
fields {
slug
}
excerpt(pruneLength: 100)
}
}
}
`)
const nodes = blogPosts.allMarkdownRemark.nodes;
console.log(nodes)
return (
<div className={articlesStyles.contentArea}>
<h1 className={articlesStyles.headerTitle}>{pageTitle}</h1>
<div className={articlesStyles.articles}>
{nodes.map(node => {
return (
<ArticleCard
key={node.id}
{...node.frontmatter}
excerpt={node.excerpt}
slug={node.fields.slug}
/>
)
})}
</div>
<Pagination />
</div>
)
}
export default Articles
【问题讨论】:
-
“已知限制 useStaticQuery 不接受变量”
-
您是否为每个标签创建一个页面?
-
是的。不过问题已经解决了。
标签: javascript reactjs graphql gatsby