refactor: optimize swr data refresh paths

This commit is contained in:
Tunglies
2026-06-28 19:42:21 +08:00
parent e71e701fd0
commit b9da0875cd
16 changed files with 153 additions and 162 deletions
+3 -5
View File
@@ -1,7 +1,7 @@
import { useEffect } from 'react'
import { useListen } from '@/hooks/use-listen'
import { queryClient } from '@/services/query-client'
import { revalidateQueries } from '@/services/query-client'
export const useLayoutEvents = (
handleNotice: (payload: [string, string]) => void,
@@ -12,9 +12,7 @@ export const useLayoutEvents = (
const unlisteners: Array<() => void> = []
let disposed = false
const revalidateKeys = (keys: readonly string[]) => {
keys.forEach((key) => {
queryClient.invalidateQueries({ queryKey: [key] })
})
void revalidateQueries(keys.map((key) => [key]))
}
const register = (
@@ -42,7 +40,7 @@ export const useLayoutEvents = (
}
register(
addListener('verge://refresh-clash-config', async () => {
addListener('verge://refresh-clash-config', () => {
revalidateKeys([
'getProxies',
'getVersion',
+10 -12
View File
@@ -64,8 +64,12 @@ import {
updateProfile,
} from '@/services/cmds'
import { showNotice } from '@/services/notice-service'
import { useQuery } from '@/services/query-client'
import { queryClient } from '@/services/query-client'
import {
fetchCacheData,
revalidateQueries,
setCacheData,
useQuery,
} from '@/services/query-client'
import {
useLoadingCache,
useSetLoadingCache,
@@ -233,7 +237,7 @@ const ProfilePage = () => {
return () => {
unsubscribe.then((cleanup) => cleanup())
}
}, [addListener, mutateProfiles, t])
}, [addListener, mutateProfiles])
// 添加紧急恢复功能
const onEmergencyRefresh = useLockFn(async () => {
@@ -241,10 +245,7 @@ const ProfilePage = () => {
try {
// 只失效 profiles 相关 query,不影响 WS 订阅、IP 缓存等其他 query
await Promise.all([
queryClient.invalidateQueries({ queryKey: ['getProfiles'] }),
queryClient.invalidateQueries({ queryKey: ['getRuntimeLogs'] }),
])
await revalidateQueries([['getProfiles'], ['getRuntimeLogs']])
// 强制重新获取配置数据
await mutateProfiles()
@@ -371,10 +372,7 @@ const ProfilePage = () => {
console.warn(`[导入刷新] 常规刷新失败,尝试清除缓存重新获取`)
try {
// 清除缓存并重新获取
await queryClient.fetchQuery({
queryKey: ['getProfiles'],
queryFn: getProfiles,
})
await fetchCacheData(['getProfiles'], getProfiles)
await onEnhance(false)
showNotice.error(
'profiles.page.feedback.notifications.importNeedsRefresh',
@@ -482,7 +480,7 @@ const ProfilePage = () => {
}
}
}
queryClient.setQueryData(['getProxies'], await calcuProxies())
setCacheData(['getProxies'], await calcuProxies())
// 完成切换
await mutateLogs()