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

React Router Dom路由配置求助:添加博客页面后网站显示异常

React Router Dom 路由配置问题排查与修复

我在给网站添加博客页面时遇到了React Router Dom的路由问题,修改前网站正常,添加博客路由后页面显示异常。

我的代码

App.js

<Routes>
  <Route path="/" element={<Navbar />}>
    <Route path="" element={<DeliveredComponents />} />
    <Route path="/blog" element={<Blog />} >
      <Route path="" element={<Allbogs />} />
      <Route path=":id" element={<Post />} />
    </Route>
    <Route path="*" element={<NoPage />} /> 
  </Route> 
</Routes> 

DeliveredComponents.js

<div className="container mt-3 text-center" >
  <div className="row">  
    <div className="col-sm-3">{<LeftSideBar />}</div>
    <div className=" col-sm-6   ">
      <div className="container row">
        <div >{<Puzzle/>}</div>            
        <div> 
          <Routes> 
            <Route index element={<Home />} />
            <Route path='/' element={<Home />} />  
            <Route path="/about" element={<About />} />
            <Route path="/category" element={<Category />} />
          </Routes>
        </div>
      </div>
    </div>
    <div className="col-sm-3">{<RightSideBar/>} </div>
  </div>
</div>

问题原因及修复方案

1. 父路由缺少<Outlet />

React Router的嵌套路由中,父路由组件必须包含<Outlet />才能渲染子路由的内容。你的Navbar和Blog组件都没加这个标签,导致子路由(比如DeliveredComponents、Allbogs)的内容无法显示。

修复:
在Navbar组件中添加<Outlet />:

import { Outlet } from 'react-router-dom';

function Navbar() {
  return (
    <>
      {/* 你的导航栏内容 */}
      <Outlet /> {/* 子路由内容会在这里渲染 */}
    </>
  );
}

同样,在Blog组件中添加<Outlet />:

import { Outlet } from 'react-router-dom';

function Blog() {
  return (
    <>
      {/* 博客页面的头部/导航内容 */}
      <Outlet /> {/* 渲染Allbogs或Post组件 */}
    </>
  );
}

2. 嵌套路由使用绝对路径引发冲突

DeliveredComponents里的<Routes>用了绝对路径(/about、/category),但它本身是/路径下的子路由,这会导致路由匹配混乱——访问/about时,App.js的根路由和DeliveredComponents里的路由会同时匹配,引发渲染异常。

修复:
把页面级路由统一移到App.js的根路由下,删除DeliveredComponents里的<Routes>:

修改后的App.js:

<Routes>
  <Route path="/" element={<Navbar />}>
    <Route index element={<DeliveredComponents />} /> {/* 根路径渲染首页内容 */}
    <Route path="about" element={<About />} />
    <Route path="category" element={<Category />} />
    <Route path="blog" element={<Blog />}>
      <Route index element={<Allbogs />} />
      <Route path=":id" element={<Post />} />
    </Route>
    <Route path="*" element={<NoPage />} /> 
  </Route> 
</Routes>

修改后的DeliveredComponents.js:

<div className="container mt-3 text-center" >
  <div className="row">  
    <div className="col-sm-3">{<LeftSideBar />}</div>
    <div className=" col-sm-6   ">
      <div className="container row">
        <div >{<Puzzle/>}</div>            
        <div>{<Home />}</div> {/* 直接渲染首页内容 */}
      </div>
    </div>
    <div className="col-sm-3">{<RightSideBar/>} </div>
  </div>
</div>

3. 子路由路径写法优化

根路由下的子路由用index代替空路径path="",语义更清晰,避免歧义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 19:36:31