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

如何在react-router-dom中设置侧边栏仅排除404页面显示?

要解决这个问题,你需要让侧边栏只匹配有效路由路径,而不是用path="*"匹配所有路径(包括404的通配符路径)。这里有两种简洁的修复方式:

方式一:利用布局组件嵌套推荐

把侧边栏整合到包裹有效路由的布局组件中,这样只有在渲染有效页面时才会加载侧边栏,404页面单独路由不使用该布局:

import { Routes, Route, Outlet } from 'react-router-dom';

// 定义带侧边栏的布局组件
function BooksLayoutWithSidebar() {
  return (
    <>
      <aside>
        <BookSidebar />
      </aside>
      {/* 用Outlet渲染子路由的内容 */}
      <BooksLayout>
        <Outlet />
      </BooksLayout>
    </>
  );
}

// 路由配置
function App() {
  return (
    <Routes>
      {/* 所有需要显示侧边栏的页面都归到这个布局下 */}
      <Route element={<BooksLayoutWithSidebar />}>
        <Route index element={<BookList />} />
        <Route path=":id" element={<Book />} />
        <Route path="new" element={<NewBook />} />
      </Route>
      {/* 404页面单独配置,不使用带侧边栏的布局 */}
      <Route path="*" element={<NotFound />} />
    </Routes>
  );
}

方式二:明确列出侧边栏需要匹配的路径

如果你不想调整布局结构,可以直接在侧边栏的Routes里列出所有有效路由的路径,替代通配符:

<>  
  <aside>  
    <Routes>
      <Route path="/" element={<BookSidebar />} />
      <Route path="/:id" element={<BookSidebar />} />
      <Route path="/new" element={<BookSidebar />} />
    </Routes>  
  </aside>  
  <Routes>
    <Route element={<BooksLayout />}>
      <Route index element={<BookList />} />  
      <Route path=":id" element={<Book />} />  
      <Route path="new" element={<NewBook />} />  
      <Route path="*" element={<NotFound />} />  
    </Route>
  </Routes>  
</>

为什么原来的写法会失效?

你之前用path="*"匹配侧边栏,这个通配符会匹配所有路径,包括404页面的path="*"路由,所以不管是有效页面还是404,侧边栏都会被渲染。上面两种方式都是通过限制侧边栏的匹配范围,让它只对有效路由生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 23:10:50