import { useQueryClient } from '@tanstack/react-query'; import { useCallback } from 'react'; import { useNavigate } from 'react-router'; import { logout } from '@/api/identity'; import { ROUTES } from '@/routes'; import { useAuthStore } from '@/stores/auth-store'; /** 登出:先吊销服务端会话(失败不阻塞),再清本地会话与查询缓存 */ export function useLogout(): () => void { const navigate = useNavigate(); const queryClient = useQueryClient(); const refreshToken = useAuthStore((state) => state.refreshToken); const clearSession = useAuthStore((state) => state.clearSession); return useCallback(() => { const finish = (): void => { clearSession(); queryClient.clear(); void navigate(ROUTES.login, { replace: true }); }; void logout(refreshToken) .catch(() => undefined) .finally(finish); }, [clearSession, navigate, queryClient, refreshToken]); }