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

React侧边栏菜单点击跳转右侧路由页面实现需求

实现侧边栏菜单路由跳转(React Router Dom 5.3.1)

步骤1:安装指定版本依赖

首先确保项目中安装了React Router Dom 5.3.1版本:

npm install react-router-dom@5.3.1
# 或使用yarn
yarn add react-router-dom@5.3.1

步骤2:改造SideNavbar组件

替换原有菜单链接为NavLink组件(自带激活状态样式),修改后的SideNavbar.js示例:

import React from 'react';
import { NavLink } from 'react-router-dom';
import './SideNavbar.css';

const SideNavbar = () => {
  return (
    <div className="side-navbar">
      <ul className="nav-menu">
        <li className="nav-item">
          <NavLink 
            exact 
            to="/" 
            className="nav-link" 
            activeClassName="active-link"
          >
            首页
          </NavLink>
        </li>
        <li className="nav-item">
          <NavLink 
            to="/dashboard" 
            className="nav-link" 
            activeClassName="active-link"
          >
            仪表盘
          </NavLink>
        </li>
        <li className="nav-item">
          <NavLink 
            to="/profile" 
            className="nav-link" 
            activeClassName="active-link"
          >
            个人资料
          </NavLink>
        </li>
        <li className="nav-item">
          <NavLink 
            to="/settings" 
            className="nav-link" 
            activeClassName="active-link"
          >
            设置
          </NavLink>
        </li>
      </ul>
    </div>
  );
};

export default SideNavbar;
  • NavLink的activeClassName会在当前路由匹配时自动添加指定类名,可与你现有SideNavbar.css中的选中样式对应(比如设置背景色、文字颜色高亮)
  • exact属性仅用于根路由/,避免其他以/开头的路由误匹配

步骤3:构建根路由布局(App.js)

在根组件中用BrowserRouter包裹整个应用,同时设置侧边栏和内容区域的布局,内容区域通过Switch和Route渲染对应组件:

import React from 'react';
import { BrowserRouter as Router, Switch, Route } from 'react-router-dom';
import SideNavbar from './SideNavbar';
// 导入你的业务组件(需自行创建)
import Home from './components/Home';
import Dashboard from './components/Dashboard';
import Profile from './components/Profile';
import Settings from './components/Settings';

import './App.css';

function App() {
  return (
    <Router>
      <div className="app-container">
        <SideNavbar />
        <main className="content-area">
          <Switch>
            <Route exact path="/" component={Home} />
            <Route path="/dashboard" component={Dashboard} />
            <Route path="/profile" component={Profile} />
            <Route path="/settings" component={Settings} />
          </Switch>
        </main>
      </div>
    </Router>
  );
}

export default App;

步骤4:添加布局样式(App.css)

确保侧边栏与内容区域横向排列:

.app-container {
  display: flex;
  height: 100vh;
}

.content-area {
  flex: 1;
  padding: 20px;
  overflow-y: auto;
}

核心说明

  • Switch组件确保仅渲染第一个匹配的路由,避免多个路由同时渲染
  • 所有路由相关组件必须放在BrowserRouter(或HashRouter)的上下文范围内
  • 若需要通过编程式跳转(比如按钮点击),可通过useHistory钩子调用history.push('/path')实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 05:25:54