diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 6273a0d..64636e3 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -1,21 +1,54 @@ -import React from 'react'; +import React, { useState, useEffect } from 'react'; import { Bell } from 'lucide-react'; import { useAuth } from '@/contexts/auth'; import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; +import { Skeleton } from '@/components/ui/skeleton'; const Header: React.FC = () => { - const { - user - } = useAuth(); + const { user } = useAuth(); const userName = user?.user_metadata?.username || '익명'; - - return
+ const [imageLoaded, setImageLoaded] = useState(false); + const [imageError, setImageError] = useState(false); + + // 이미지 프리로딩 처리 + useEffect(() => { + const preloadImage = new Image(); + preloadImage.src = '/zellyy.png'; + + preloadImage.onload = () => { + setImageLoaded(true); + }; + + preloadImage.onerror = () => { + console.error('아바타 이미지 로드 실패'); + setImageError(true); + }; + }, []); + + return ( +
- - ZY + {!imageLoaded && !imageError ? ( +
+ +
+ ) : ( + <> + setImageLoaded(true)} + onError={() => setImageError(true)} + /> + {(imageError || !imageLoaded) && ( + ZY + )} + + )}

@@ -28,7 +61,8 @@ const Header: React.FC = () => {

-
; +
+ ); }; export default Header;