javascript - 盖茨比类别 slugs 在动态类别页面中不起作用
问题描述
在我gatsby-node.js
创建动态类别页面:
exports.createPages = async ({ graphql, actions: { createPage } }) => {
const {
data: { projects, categories },
} = await graphql(`
query Projects {
projects: allGraphCmsProject(filter: { stage: { eq: PUBLISHED } }) {
nodes {
id
slug
}
}
categories: allGraphCmsCategory {
nodes {
id
slug
}
}
}
`);
projects.nodes.forEach(({ id, slug }) => {
createPage({
path: `${slug}`,
component: path.resolve('./src/templates/ProjectPage.tsx'),
context: { id, slug },
});
});
categories.nodes.forEach(({ id, slug }) => {
createPage({
path: `/category/${slug}`,
component: path.resolve('./src/templates/CategoryPage.tsx'),
context: { id },
});
});
};
在里面src/templates/CategoryPage.tsx
我渲染了一个CategoryList.tsx
组件。
在页面上的浏览器/category
(src/pages/category.tsx)中,我还渲染了列表类别(CategoryList.tsx
组件)。当我从该页面单击一个类别时,它工作正常,它显示一个类似的 url,/category/category-one
并在浏览器中显示类别页面。
但是,如果我单击另一个类别(从类别页面 ( src/templates/CategoryPage.tsx
) 中,我会得到一个像/category/category-one/category-two
?
解决方案
但是,如果我单击另一个类别(从类别页面 (
src/templates/CategoryPage.tsx
) 中,我会得到一个像/category/category-one/category-two
?
您的页面生成看起来不错,除了一些不必要的模板文字:
projects.nodes.forEach(({ id, slug }) => {
createPage({
path: slug, // before was path: `${slug}`,
component: path.resolve('./src/templates/ProjectPage.tsx'),
context: { id, slug },
});
});
出现您的问题是因为您在组件/
的开头缺少初始斜杠 ( ) 。to
props
<Link>
在您的类别页面上:
<Link to={`/${slug}`}/>{categoryName}</Link>
注意:我不知道您的页面结构,但目标是添加一个初始斜线。
这是因为slug
, 可能带有或不带有初始斜线。如果没有,它会将当前 URL 连接到slug
自身,就像锚 ( <a>
) 通常做的那样。
推荐阅读
- vb.net - 间歇性抗生素给药的 Visual Basic 功能
- node.js - docker 容器内的 pm2-runtime 收到 SIGTERM - 为什么?
- shell - 在 shell 中,我如何将 stdout 和 stderr 组合成输出顺序,而 stderr 也分开?
- python - 在 Mac OS 上安装 Python 模块
- .htaccess - 使用 cloudflare SSL 时如何不重定向 Twitterbot?
- java - 通过Java设置springboot logback根记录器级别不起作用
- user-interface - 重新创建 Pinterest UI Flutter
- c# - 关闭代码文件时自动折叠区域
- angular - 带有可重用子组件示例的 Angular 8 反应式表单
- notepad++ - 大型 .A2L 文件,引用的翻译问题