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

React Router路由配置:访问/404时仅显示NotFound组件,隐藏默认组件

解决React路由/404页面仅显示NotFound组件的问题

有两种常见方法可以实现访问/404路径时只渲染<NotFound />,不加载<Nav />、<Footer />等公共组件:

方法一:通过外层Switch拆分路由结构

把/404路由放在最外层的Switch中优先匹配,其他路径统一使用包含公共组件的布局:

function App() {
  return (
    <Router>
      <Switch>
        {/* 优先匹配/404,匹配成功后仅返回NotFound组件 */}
        <Route path="/404" exact>
          <NotFound />
        </Route>
        {/* 其他所有路径都渲染公共组件+业务页面 */}
        <Route path="/">
          <Nav />
          <div className="App">
            <Switch>
              <Route path="/projects">
                <Projects />
              </Route>
              <Route path="/">
                <div className='container'>
                  <Header />
                  <hr />
                  ...
                </div>
              </Route>
            </Switch>
          </div>
          <Footer />
        </Route>
      </Switch>
    </Router>
  );
}

原理:Switch组件会从上到下匹配第一个符合条件的路由,/404匹配成功后就不会执行后续的路由逻辑,自然不会加载公共组件。

方法二:使用useLocation条件渲染公共组件

通过useLocation钩子获取当前路径,判断是否为/404,再决定是否渲染公共组件:

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

function App() {
  const location = useLocation();
  const isNotFoundPage = location.pathname === '/404';

  return (
    <Router>
      {/* 非404页面才显示导航 */}
      {!isNotFoundPage && <Nav />}
      <div className="App">
        <Switch>
          <Route path="/404" exact>
            <NotFound />
          </Route>
          <Route path="/projects">
            <Projects />
          </Route>
          <Route path="/">
            <div className='container'>
              <Header />
              <hr />
              ...
            </div>
          </Route>
        </Switch>
      </div>
      {/* 非404页面才显示页脚 */}
      {!isNotFoundPage && <Footer />}
    </Router>
  );
}

原理:通过路径判断动态控制公共组件的渲染状态,/404路径下直接跳过Nav和Footer的渲染逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:20:47