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

React侧边栏导航添加页面跳转链接问题求助

解决React侧边栏导航跳转页面的问题

要实现侧边栏按钮跳转应用内页面,按以下步骤修改即可:

1. 给菜单数组添加路径属性

给Menus里的每个主菜单和子菜单加上path字段,对应跳转的路由地址:

const Menus = [
    { title: "Home", path: "/home", icon: <AiFillHome />},
    { title: "Trending", path: "/trending", icon: <AiFillFire />},
    { title: "Servers", path: "/servers", icon: <AiOutlineCloudServer />},
    { 
        title: "Mods",
        icon: <AiFillSave />,
        submenu: true,
        submenuItems: [
            { title: "GTA Mods", path: "/mods/gta" },
            { title: "RedDead Mods", path: "/mods/reddead" },
            { title: "Skyrim Mods", path: "/mods/skyrim" },
        ],       
    },
    { title: "Uploads", path: "/uploads", icon: <AiFillFolder />},
    { title: "Settings", path: "/settings", icon: <AiFillSetting />},
    { title: "Logout", path: "/logout", icon: <AiOutlineLogout />}
];

2. 用Link组件包裹菜单选项

使用react-router-dom提供的Link组件包裹每个菜单项,点击就能触发路由跳转,主菜单和子菜单都要处理:

// 主菜单渲染部分修改
{Menus.map((menu , index) => (
    <>
        <Link to={menu.path} className="w-full">
            <li 
                key={index} 
                className={`text-gray-300 text-sm flex items-center gap-x-4 cursor-pointer p-2 hover:bg-black rounded-md ${menu.spacing ? "mt-9" : "mt-2"}`} 
            >
                <span className='text-2xl block float-left'> 
                    {menu.icon} 
                </span>
                <span className={`text-base font-medium flex-1 ${!open && "hidden"}`}>
                    {menu.title}
                </span>
                {menu.submenu && open && (
                    <BsChevronDown className={`${submenuOpen && "rotate-180"}`} onClick={()=> setSubmenuOpen(!submenuOpen)} />
                )}
            </li>
        </Link>
        {menu.submenu && submenuOpen && open && (
            <ul>
                {menu.submenuItems.map((submenuItem, index) => (
                    <Link to={submenuItem.path} className="w-full" key={index}>
                        <li className="text-gray-300 text-sm flex items-center gap-x-4 cursor-pointer p-2 px-5 hover:bg-black rounded-md">
                            {submenuItem.title}
                        </li>
                    </Link>
                ))}
            </ul>
        )}
    </>
))}

3. 在App.js中配置所有对应路由

先创建好每个页面组件(比如Trending.js、Servers.js等),然后在App.js中添加对应的路由规则:

import { BrowserRouter as Router, Routes, Route  } from "react-router-dom";
import Sidebarnav from "./components/Sidebarnav";
import Home from "./pages/Home";
import Trending from "./pages/Trending";
import Servers from "./pages/Servers";
import GTAMods from "./pages/GTAMods";
import RedDeadMods from "./pages/RedDeadMods";
import SkyrimMods from "./pages/SkyrimMods";
import Uploads from "./pages/Uploads";
import Settings from "./pages/Settings";
import Logout from "./pages/Logout";

function App() {
  return (
    <Router>
      <Sidebarnav />
      <Routes>
        <Route path='/' element={<Home/>} /> {/* 默认根路径跳转到Home */}
        <Route path='/home' element={<Home/>} />
        <Route path='/trending' element={<Trending/>} />
        <Route path='/servers' element={<Servers/>} />
        <Route path='/mods/gta' element={<GTAMods/>} />
        <Route path='/mods/reddead' element={<RedDeadMods/>} />
        <Route path='/mods/skyrim' element={<SkyrimMods/>} />
        <Route path='/uploads' element={<Uploads/>} />
        <Route path='/settings' element={<Settings/>} />
        <Route path='/logout' element={<Logout/>} />
      </Routes>
    </Router>
  );
}

export default App;

修复原代码中的小错误

原Sidebarnav代码有两处语法错误,必须修正:

  • 未闭合的<h1>标签:将<h1 className={text-white text-center origin-left font-medium text-2xl duration-300 UserName}修正为<h1 className={text-white text-center origin-left font-medium text-2xl duration-300}>UserName`
  • 错误的引号:将<ul className='"pt-2'>修正为<ul className='pt-2'>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 05:15:20