You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Gatsby v5动态路由配置异常:访问路由显示404而非目标组件

Gatsby v5 动态路由配置问题解决

你的核心问题是误用了React Router的路由方式,Gatsby有自己基于文件系统的路由机制,不需要手动用BrowserRouter、Routes来定义路由,这也是导致你访问/projects/1出现404的原因。

下面是具体的修正步骤:

1. 移除React Router相关依赖与代码

Gatsby底层已经集成了React Router,但它通过文件系统路由自动管理路由规则,不需要你手动包裹BrowserRouter或定义Route。直接删除projects.js中的BrowserRouter、Routes、Route相关代码。

2. 创建动态路由页面

在src/pages/projects目录下创建名为[projectID].js的文件(注意方括号是必填格式,Gatsby会识别[projectID]为URL动态参数),把你的ProjectDetails组件逻辑迁移到这个文件中:

import * as React from 'react'
import { useParams } from 'gatsby'
import Layout from '../../layout'

const ProjectDetailsPage = () => {
  const { projectID } = useParams()

  return (
    <Layout>
      <div>
        <h2>Project {projectID}</h2>
      </div>
    </Layout>
  )
}

export const Head = () => <title>Project {projectID}</title>

export default ProjectDetailsPage

3. 修改Projects列表页面

更新src/pages/projects.js,用Gatsby自带的Link组件替换自定义的MyProjectLink,直接指向动态路由地址:

import * as React from 'react'
import { Link } from 'gatsby'
import Layout from '../layout'

const Projects = () => {
  return (
    <Layout>
      <div>
        <Link to="/projects/1">Project 1</Link>
        <br />
        <Link to="/projects/2">Project 2</Link>
      </div>
    </Layout>
  )
}

export const Head = () => <title>Our Projects</title>

export default Projects

关键原理说明

  • Gatsby的路由规则:src/pages下的每个文件对应一个路由,比如src/pages/projects.js对应/projects,src/pages/projects/[projectID].js对应/projects/:projectID这种动态路由。
  • 手动添加BrowserRouter会和Gatsby顶层的路由系统冲突,导致自定义的Route无法被识别,访问动态路径时Gatsby找不到对应的页面文件,就会返回404。
  • 如果需要从数据源(如JSON、CMS)自动生成大量动态路由,可以在gatsby-node.js中使用createPages API来实现,但对于少量静态动态路径,用[param].js的文件格式就足够了。

内容的提问来源于stack exchange,提问作者Antonio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 23:37:45