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}
+ ),
+}));