From 09277205e76ebf4802f447daf6ee139a78c264ce Mon Sep 17 00:00:00 2001 From: "jihoon87.lee" Date: Wed, 4 Feb 2026 09:35:00 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20React=20Query=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C=20=ED=9B=85?= =?UTF-8?q?=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - use-user-query.ts 생성 - Supabase 인증 사용자 정보 자동 캐싱 및 재검증 --- hooks/queries/use-user-query.ts | 42 +++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 hooks/queries/use-user-query.ts diff --git a/hooks/queries/use-user-query.ts b/hooks/queries/use-user-query.ts new file mode 100644 index 0000000..9cb4c00 --- /dev/null +++ b/hooks/queries/use-user-query.ts @@ -0,0 +1,42 @@ +import { useQuery } from "@tanstack/react-query"; +import { createClient } from "@/utils/supabase/client"; + +/** + * [사용자 정보 조회 쿼리] + * + * 현재 로그인한 사용자의 정보를 조회합니다. + * - 자동 캐싱 및 재검증 + * - 로딩/에러 상태 자동 관리 + * + * @example + * ```tsx + * import { useUserQuery } from '@/hooks/queries/use-user-query'; + * + * function Profile() { + * const { data: user, isLoading, error } = useUserQuery(); + * + * if (isLoading) return
Loading...
; + * if (error) return
Error: {error.message}
; + * if (!user) return
Not logged in
; + * + * return
Welcome, {user.email}
; + * } + * ``` + */ +export function useUserQuery() { + return useQuery({ + queryKey: ["user"], + queryFn: async () => { + const supabase = createClient(); + const { + data: { user }, + error, + } = await supabase.auth.getUser(); + + if (error) throw error; + return user; + }, + staleTime: 5 * 60 * 1000, // 5분 - 사용자 정보는 자주 변경되지 않음 + retry: 1, + }); +}