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

React Router跳转/reactjs时如何隐藏指定组件保留Navbar

实现方案

当前代码中Intro、Services、Experience三个组件放置在路由匹配容器外部,路由切换不会影响这部分组件的渲染,因此无论跳转到哪个路径,三个组件都会常驻显示。
最符合React Router设计规范的实现方式是:将和路径绑定的渲染内容全部收拢到路由规则中,全站通用的固定组件(如当前的Navbar)保留在路由匹配层外部,即可实现不同路径下的差异化渲染。
修改后的完整代码如下:

import React from "react";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import Navbar from "./components/navbar/navbar";
import Intro from "./components/intro/intro";
import Services from "./components/services/services";
import Experience from "./components/experience/experience";
import TrelloClone from "./pages/TrelloClone/TrelloClone";
import './App.css'

function App() {
  return (
    <div className="App">
      <BrowserRouter>
        {/* 导航栏放在路由规则外层,所有路径下都会固定渲染 */}
        <Navbar />
        <Routes>
          {/* 根路径匹配时渲染首页三个模块 */}
          <Route path="/" element={
            <>
              <Intro />
              <Services />
              <Experience />
            </>
          } />
          {/* /reactjs路径匹配时仅渲染TrelloClone组件 */}
          <Route path="/reactjs" element={<TrelloClone />} />
          {/* 后续新增其他子页面路由直接在此处追加即可,默认不会显示首页模块 */}
        </Routes>
      </BrowserRouter>
    </div>
  );
}

export default App;

方案说明

  • 调整后访问根路径/时,页面展示效果和原有逻辑完全一致,不会破坏现有首页的展示
  • 访问/reactjs路径时,仅渲染全局Navbar和对应路由的TrelloClone组件,三个首页模块不会被挂载
  • 所有路由相关的渲染逻辑统一收敛在路由规则中,后续新增页面不需要额外写隐藏逻辑,可维护性更好

如果不想调整现有代码结构,也可以通过useLocation钩子获取当前路径做条件渲染,但这种方式后续每新增一个子页面都需要修改判断条件,不推荐长期使用:

注意:useLocation钩子必须在BrowserRouter包裹的子组件内部调用,直接在App组件中调用会抛错,需要将路由内的逻辑拆分为独立子组件使用。
核心判断逻辑示例:

const location = useLocation();
// 非/reactjs路径时才渲染三个首页组件
{location.pathname !== "/reactjs" && (
  <>
    <Intro />
    <Services />
    <Experience />
  </>
)}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:15:33