diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 7097d527c21aae026c9f3c0ea6774e96303f5b01..4953f1eb29e75d3e56e8b7e54d0d435862f1f745 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -49,6 +49,8 @@ fn main() -> std::io::Result<()> {
               if let Err(err) = profiles.activate(clash.info.clone()) {
                 log::error!("{}", err);
               }
+              let window = app_handle.get_window("main").unwrap();
+              window.emit("restart_clash", "yes").unwrap();
             }
             Err(err) => log::error!("{}", err),
           }
diff --git a/src/pages/_layout.tsx b/src/pages/_layout.tsx
index ed9b2e79f026c44c2a09e3c32715f27462764368..f787754c233f966e983f52494587ee0f310e9823 100644
--- a/src/pages/_layout.tsx
+++ b/src/pages/_layout.tsx
@@ -1,11 +1,13 @@
-import useSWR, { SWRConfig } from "swr";
+import useSWR, { SWRConfig, useSWRConfig } from "swr";
 import { useEffect, useMemo } from "react";
 import { Route, Routes } from "react-router-dom";
 import { useRecoilState } from "recoil";
 import { alpha, createTheme, List, Paper, ThemeProvider } from "@mui/material";
+import { listen } from "@tauri-apps/api/event";
 import { appWindow } from "@tauri-apps/api/window";
 import { atomPaletteMode, atomThemeBlur } from "../states/setting";
 import { getVergeConfig } from "../services/cmds";
+import { getAxios } from "../services/api";
 import { routers } from "./_routers";
 import LogoSvg from "../assets/image/logo.svg";
 import Traffic from "../components/traffic";
@@ -14,6 +16,7 @@ import UpdateButton from "../components/update-button";
 import LayoutControl from "../components/layout-control";
 
 const Layout = () => {
+  const { mutate } = useSWRConfig();
   const [mode, setMode] = useRecoilState(atomPaletteMode);
   const [blur, setBlur] = useRecoilState(atomThemeBlur);
   const { data: vergeConfig } = useSWR("getVergeConfig", getVergeConfig);
@@ -22,6 +25,15 @@ const Layout = () => {
     window.addEventListener("keydown", (e) => {
       if (e.key === "Escape") appWindow.hide();
     });
+
+    listen("restart_clash", async () => {
+      // the clash info may be updated
+      await getAxios(true);
+      // make sure that the clash is ok
+      setTimeout(() => mutate("getProxies"), 1000);
+      setTimeout(() => mutate("getProxies"), 2000);
+      mutate("getClashConfig");
+    });
   }, []);
 
   useEffect(() => {
diff --git a/src/services/api.ts b/src/services/api.ts
index 8e0273f1e7e26c863c1918f03b147d66f129501d..ad034cca5e385fd9c6d07d7a003fbde7e73e523b 100644
--- a/src/services/api.ts
+++ b/src/services/api.ts
@@ -7,8 +7,9 @@ let server = "";
 let secret = "";
 
 /// initialize some infomation
-export async function getAxios() {
-  if (axiosIns) return axiosIns;
+/// enable force update axiosIns
+export async function getAxios(force: boolean = false) {
+  if (axiosIns && !force) return axiosIns;
 
   try {
     const info = await getClashInfo();