实现页面切换和保持
Tutorial: ReactVite案例
Category: React
Published: 2026-04-07 13:58:26
Views: 20
Likes: 0
Comments: 0
- router 调整
import { Navigate, useRoutes } from "react-router-dom";
import type { MenuProps } from "antd";
import User from "../pages/User/User";
import Home from "../pages/Home/Home";
import Layout from "../pages/Layout/Layout";
type MenuItem = Required<MenuProps>["items"][number];
export type MenuItemSelf = MenuItem & {
path: string;
element: JSX.Element;
children?: MenuItemSelf[];
};
export const routerItem: MenuItemSelf[] = [
{
path: "/",
label: "首页",
key: "/",
element: <Navigate to="/layout/home" />,
},
{
path: "/layout",
label: "控制台",
key: "layout",
element: <Layout />,
children: [
{
path: "user",
label: "用户",
key: "user",
element: <User />,
index: "true",
},
{
path: "home",
label: "首页",
key: "home",
element: <Home />,
},
],
},
];
const GetRouters = () => {
return useRoutes(routerItem);
};
export default GetRouters;
- Aside.tsx
import React, { useState } from "react";
import { useNavigate, useLocation } from "react-router-dom";
import { Menu } from "antd";
import type { MenuProps } from "antd";
import { routerItem } from "../../router/router";
const Aside = () => {
const navigate = useNavigate();
const [router] = useState(routerItem);
const { pathname } = useLocation();
const [openKeys, setOpenKeys] = useState([
pathname.split("/").length > 1 ? pathname.split("/")[1] : "",
]);
const handleMenu: MenuProps["onClick"] = (e) => {
navigate(e.key);
};
const onOpenChange = (keys: string[]) => {
setOpenKeys([keys[keys.length - 1]]);
};
return (
<>
<Menu
theme="dark"
mode="inline"
items={router}
onClick={handleMenu}
onOpenChange={onOpenChange}
openKeys={openKeys}
defaultSelectedKeys={[pathname.split("/").at(-1) || ""]}
/>
</>
);
};
export default Aside;