【发布时间】:2023-01-31 17:48:47
【问题描述】:
我用 Gatsby.js 做了一个简单的站点,无法配置动态路由。
我有 index.js 页面(由 React 自动创建),看起来像:
import * as React from 'react'
const IndexPage = () => {
return (
<Layout
pageTitle="Home Page"
>
Some text for my main page
</Layout>
)
}
export const Head = () => <title>Home Page</title>
export default IndexPage
布局组件包括如下所示的页眉:
import React, { useState, useEffect } from 'react';
import { Link } from 'gatsby';
const Header = () => {
return (
<Wrapper style={{ *some styles* }}>
<Link to="/">Index</Link>
<Link to="/projects">Projects</Link >
</Wrapper>
)
};
export default Header;
我的项目页面如下所示:
import * as React from 'react'
import { BrowserRouter, Route, Routes } from 'react-router-dom'
import Layout from '../layout'
const Projects = () => {
return (
<BrowserRouter>
<Layout>
<Wrapper>
<Routes>
<Route path="projects/:projectID/" component={ProjectDetails} />
</Routes>
<MyProjectLink to="/projects/1">
Project 1
</MyProjectLink>
<MyProjectLink to="/projects/2">
Project 2
</MyProjectLink>
</Wrapper>
</Layout>
</BrowserRouter>
)
}
export const Head = () => <title>Our Projects</title>
export default Projects
我有我的 ProjectDetails 组件:
import React from 'react';
import { useParams } from 'react-router';
import Layout from '../../pages/layout';
const ProjectDetails = () => {
const { projectID } = useParams();
return (
<Layout>
<Wrapper>
<h2>Project {projectID}</h2>
</Wrapper>
</Layout>
);
}
export default ProjectDetails;
问题是,当我导航到 localhost:8000/projects/1(或“2”、“3”或“100500”)时,我看到一个 404 页面而不是我的项目详细信息组件。
我已经尝试将索引页面包装到 BrowserRouter 并将路由与我的路由一起移动到那里,但在我看来这是一个愚蠢的想法(而且它不起作用)。
我错过了什么?我不知道的 Gatsby (v5) 的一些特性?我是 Getsby 的新手,老实说,我认为这里的动态路由与 React Router 中的工作方式相同。
【问题讨论】:
-
您如何创建页面(项目)?您是要创建仅供客户使用的路线还是只是项目的模板?
-
这就是我现在所做的一切:创建模板组件。在我看来,我必须为这些页面创建降价,然后在 gatsby-node 中使用 createPage 进行一些配置,对吗?