diff --git a/src/components/setting/setting-verge.tsx b/src/components/setting/setting-verge.tsx index 91a16a8d..fa32c284 100644 --- a/src/components/setting/setting-verge.tsx +++ b/src/components/setting/setting-verge.tsx @@ -157,8 +157,8 @@ const SettingVerge = ({ onError }: Props) => { onGuard={(e) => patchVerge({ start_page: e })} > diff --git a/src/pages/_layout.tsx b/src/pages/_layout.tsx index 8e806535..be11146e 100644 --- a/src/pages/_layout.tsx +++ b/src/pages/_layout.tsx @@ -4,9 +4,8 @@ import relativeTime from "dayjs/plugin/relativeTime"; import { SWRConfig, mutate } from "swr"; import { useEffect } from "react"; import { useTranslation } from "react-i18next"; -import { Route, Routes, useLocation } from "react-router-dom"; -import { CSSTransition, TransitionGroup } from "react-transition-group"; -import { alpha, List, Paper, ThemeProvider } from "@mui/material"; +import { useLocation, useRoutes } from "react-router-dom"; +import { List, Paper, ThemeProvider } from "@mui/material"; import { listen } from "@tauri-apps/api/event"; import { appWindow } from "@tauri-apps/api/window"; import { routers } from "./_routers"; @@ -16,7 +15,7 @@ import LogoSvg from "@/assets/image/logo.svg?react"; import LogoSvg_dark from "@/assets/image/logo_dark.svg?react"; import { atomThemeMode } from "@/services/states"; import { useRecoilState } from "recoil"; -import { BaseErrorBoundary, Notice } from "@/components/base"; +import { Notice } from "@/components/base"; import { LayoutItem } from "@/components/layout/layout-item"; import { LayoutControl } from "@/components/layout/layout-control"; import { LayoutTraffic } from "@/components/layout/layout-traffic"; @@ -27,6 +26,8 @@ import "dayjs/locale/ru"; import "dayjs/locale/zh-cn"; import { getPortableFlag } from "@/services/cmds"; import { useNavigate } from "react-router-dom"; +import React from "react"; +import { TransitionGroup, CSSTransition } from "react-transition-group"; export let portableFlag = false; dayjs.extend(relativeTime); @@ -43,6 +44,8 @@ const Layout = () => { const { language, start_page } = verge || {}; const navigate = useNavigate(); const location = useLocation(); + const routersEles = useRoutes(routers); + if (!routersEles) return null; useEffect(() => { window.addEventListener("keydown", (e) => { @@ -142,7 +145,7 @@ const Layout = () => { {routers.map((router) => ( {t(router.label)} @@ -173,19 +176,7 @@ const Layout = () => { timeout={300} classNames="page" > - - {routers.map(({ label, link, ele: Ele }) => ( - - - - } - /> - ))} - + {React.cloneElement(routersEles, { key: location.pathname })} diff --git a/src/pages/_routers.tsx b/src/pages/_routers.tsx index 68fdb29d..4c6e81dc 100644 --- a/src/pages/_routers.tsx +++ b/src/pages/_routers.tsx @@ -5,6 +5,7 @@ import ProfilesPage from "./profiles"; import SettingsPage from "./settings"; import ConnectionsPage from "./connections"; import RulesPage from "./rules"; +import { BaseErrorBoundary } from "@/components/base"; import ProxiesSvg from "@/assets/image/itemicon/proxies.svg?react"; import ProfilesSvg from "@/assets/image/itemicon/profiles.svg?react"; @@ -25,44 +26,49 @@ import SettingsRoundedIcon from "@mui/icons-material/SettingsRounded"; export const routers = [ { label: "Label-Proxies", - link: "/", + path: "/", icon: [, ], - ele: ProxiesPage, + element: , }, { label: "Label-Profiles", - link: "/profile", + path: "/profile", icon: [, ], - ele: ProfilesPage, + element: , }, { label: "Label-Connections", - link: "/connections", + path: "/connections", icon: [, ], - ele: ConnectionsPage, + element: , }, { label: "Label-Rules", - link: "/rules", + path: "/rules", icon: [, ], - ele: RulesPage, + element: , }, { label: "Label-Logs", - link: "/logs", + path: "/logs", icon: [, ], - ele: LogsPage, + element: , }, { label: "Label-Test", - link: "/test", + path: "/test", icon: [, ], - ele: TestPage, + element: , }, { label: "Label-Settings", - link: "/settings", + path: "/settings", icon: [, ], - ele: SettingsPage, + element: , }, -]; +].map((router) => ({ + ...router, + element: ( + {router.element} + ), +}));