diff --git a/src/components/setting/mods/sysproxy-viewer.tsx b/src/components/setting/mods/sysproxy-viewer.tsx index 9635c0056..ee2d06105 100644 --- a/src/components/setting/mods/sysproxy-viewer.tsx +++ b/src/components/setting/mods/sysproxy-viewer.tsx @@ -22,8 +22,7 @@ import { useState, } from "react"; import { useTranslation } from "react-i18next"; -import useSWR, { mutate } from "swr"; -import { getBaseConfig } from "tauri-plugin-mihomo-api"; +import { mutate } from "swr"; import { BaseDialog, @@ -113,6 +112,8 @@ export const SysproxyViewer = forwardRef((props, ref) => { type AutoProxy = Awaited>; const [autoproxy, setAutoproxy] = useState(); + const { clashConfig } = useAppData(); + const { enable_system_proxy: enabled, proxy_auto_config, @@ -148,13 +149,6 @@ export const SysproxyViewer = forwardRef((props, ref) => { return "127.0.0.1,192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,localhost,*.local,*.crashlytics.com,"; }; - const { data: clashConfig } = useSWR("getClashConfig", getBaseConfig, { - revalidateOnFocus: false, - revalidateIfStale: true, - dedupingInterval: 1000, - errorRetryInterval: 5000, - }); - const prevMixedPortRef = useRef(clashConfig?.mixedPort); useEffect(() => { diff --git a/src/pages/proxies.tsx b/src/pages/proxies.tsx index 4005c44a3..9a5688f9d 100644 --- a/src/pages/proxies.tsx +++ b/src/pages/proxies.tsx @@ -3,13 +3,13 @@ import { Box, Button, ButtonGroup } from "@mui/material"; import { useLockFn } from "ahooks"; import { useCallback, useEffect, useMemo, useReducer, useState } from "react"; import { useTranslation } from "react-i18next"; -import useSWR from "swr"; -import { closeAllConnections, getBaseConfig } from "tauri-plugin-mihomo-api"; +import { closeAllConnections } from "tauri-plugin-mihomo-api"; import { BasePage } from "@/components/base"; import { ProviderButton } from "@/components/proxy/provider-button"; import { ProxyGroups } from "@/components/proxy/proxy-groups"; import { useVerge } from "@/hooks/use-verge"; +import { useAppData } from "@/providers/app-data-context"; import { getRuntimeProxyChainConfig, patchClashMode, @@ -41,21 +41,11 @@ const ProxyPage = () => { null as string | null, ); + const { clashConfig, refreshClashConfig } = useAppData(); + const updateChainConfigData = useCallback((value: string | null) => { dispatchChainConfigData(value); }, []); - - const { data: clashConfig, mutate: mutateClash } = useSWR( - "getClashConfig", - getBaseConfig, - { - revalidateOnFocus: false, - revalidateIfStale: true, - dedupingInterval: 1000, - errorRetryInterval: 5000, - }, - ); - const { verge } = useVerge(); const modeList = useMemo(() => MODES, []); @@ -69,7 +59,7 @@ const ProxyPage = () => { closeAllConnections(); } await patchClashMode(mode); - mutateClash(); + refreshClashConfig(); }); const onToggleChainMode = useLockFn(async () => { diff --git a/src/providers/app-data-context.ts b/src/providers/app-data-context.ts index 7b7244aba..fe9bbe14e 100644 --- a/src/providers/app-data-context.ts +++ b/src/providers/app-data-context.ts @@ -44,7 +44,7 @@ export const useAppData = () => { const context = use(AppDataContext); if (!context) { - throw new Error("useAppData必须在AppDataProvider内使用"); + throw new Error("useAppData must be used within AppDataProvider"); } return context; diff --git a/src/providers/app-data-provider.tsx b/src/providers/app-data-provider.tsx index 541c2cf9c..18883ff1f 100644 --- a/src/providers/app-data-provider.tsx +++ b/src/providers/app-data-provider.tsx @@ -15,7 +15,7 @@ import { getRunningMode, getSystemProxy, } from "@/services/cmds"; -import { SWR_DEFAULTS, SWR_REALTIME, SWR_SLOW_POLL } from "@/services/config"; +import { SWR_DEFAULTS, SWR_MIHOMO, SWR_REALTIME } from "@/services/config"; import { AppDataContext, AppDataContextType } from "./app-data-context"; @@ -43,25 +43,25 @@ export const AppDataProvider = ({ const { data: clashConfig, mutate: refreshClashConfig } = useSWR( "getClashConfig", getBaseConfig, - SWR_SLOW_POLL, + SWR_MIHOMO, ); const { data: proxyProviders, mutate: refreshProxyProviders } = useSWR( "getProxyProviders", calcuProxyProviders, - SWR_DEFAULTS, + SWR_MIHOMO, ); const { data: ruleProviders, mutate: refreshRuleProviders } = useSWR( "getRuleProviders", getRuleProviders, - SWR_DEFAULTS, + SWR_MIHOMO, ); const { data: rulesData, mutate: refreshRules } = useSWR( "getRules", getRules, - SWR_DEFAULTS, + SWR_MIHOMO, ); useEffect(() => { diff --git a/src/services/config.ts b/src/services/config.ts index f49b86ffc..a153d25ed 100644 --- a/src/services/config.ts +++ b/src/services/config.ts @@ -1,4 +1,12 @@ -import { useSWRConfig } from "swr"; +const SWR_NOT_SMART = { + revalidateOnFocus: false, + revalidateOnReconnect: false, + revalidateIfStale: false, + suspense: false, + errorRetryCount: 2, + dedupingInterval: 1500, + errorRetryInterval: 3000, +} as const; export const SWR_DEFAULTS = { revalidateOnFocus: false, @@ -19,7 +27,6 @@ export const SWR_SLOW_POLL = { refreshInterval: 60000, } as const; -export const useSWRMutate = () => { - const { mutate } = useSWRConfig(); - return mutate; +export const SWR_MIHOMO = { + ...SWR_NOT_SMART, };