From fdea9d16a66db9e6f03056ba756331e98114fd77 Mon Sep 17 00:00:00 2001 From: tone <3341154833@qq.com> Date: Thu, 19 Jun 2025 15:01:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E5=8D=87userMe=E5=88=B0hook=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/console/(with-menu)/layout.tsx | 28 +++++------------ tone-page-web/hooks/user/use-user-me.ts | 30 +++++++++++++++++++ 2 files changed, 38 insertions(+), 20 deletions(-) create mode 100644 tone-page-web/hooks/user/use-user-me.ts diff --git a/tone-page-web/app/console/(with-menu)/layout.tsx b/tone-page-web/app/console/(with-menu)/layout.tsx index f2430b2..8774155 100644 --- a/tone-page-web/app/console/(with-menu)/layout.tsx +++ b/tone-page-web/app/console/(with-menu)/layout.tsx @@ -12,38 +12,26 @@ import { SidebarProvider, SidebarTrigger, } from "@/components/ui/sidebar" +import { useUserMe } from "@/hooks/user/use-user-me"; import { UserApi } from "@/lib/api"; import { useRouter } from "next/navigation"; -import { useEffect, useLayoutEffect } from "react"; import { toast } from "sonner"; -import useSWR from "swr"; export default function ConsoleMenuLayout({ children, }: { children: React.ReactNode }) { - const isClientSide = typeof window !== 'undefined'; const router = useRouter(); - const { data: user, isLoading, error, mutate } = useSWR( - '/api/user/me', - async () => UserApi.me(), - { - onError: (error) => { - if (error.statusCode === 401) { - if (isClientSide) { - localStorage.removeItem('token'); - } - toast.info('登录凭证已失效,请重新登录'); - router.replace('/console/login'); - } - }, - revalidateIfStale: false, - revalidateOnFocus: false, - revalidateOnReconnect: false, + const { user, isLoading, error } = useUserMe({ + onError: (e) => { + if (e.statusCode === 401) { + toast.info('登录凭证已失效,请重新登录'); + router.replace('/console/login'); + } } - ); + }); if (!isLoading && !error && !user) { router.replace('/console/login'); diff --git a/tone-page-web/hooks/user/use-user-me.ts b/tone-page-web/hooks/user/use-user-me.ts new file mode 100644 index 0000000..e7290da --- /dev/null +++ b/tone-page-web/hooks/user/use-user-me.ts @@ -0,0 +1,30 @@ +import { UserApi } from "@/lib/api"; +import useSWR from "swr"; + +export function useUserMe({ onError }: { onError?: (e: any) => void } = {}) { + const isClientSide = typeof window !== 'undefined'; + + const { data: user, isLoading, error } = useSWR( + '/api/user/me', + async () => UserApi.me(), + { + onError: (error) => { + if (error.statusCode === 401) { + if (isClientSide) { + localStorage.removeItem('token'); + } + } + + onError?.(error); + }, + revalidateIfStale: false, + revalidateOnFocus: false, + } + ); + + return { + user, + isLoading, + error + } +} \ No newline at end of file