diff --git a/src/components/home/HeroSection.tsx b/src/components/home/HeroSection.tsx index 9342a3d..85bd985 100644 --- a/src/components/home/HeroSection.tsx +++ b/src/components/home/HeroSection.tsx @@ -1,11 +1,17 @@ import { motion } from 'framer-motion'; import Image from 'next/image'; +import useNavigationStore from '@/stores/routerStore'; + import HeroSectionLayout from './HeroSectionLayout'; import { ImageCard } from '../common/card/ImageCard'; import AverageStar from '../wineDetail/AverageStar'; export const HeroSection = () => { + const isFirstPageLoad = useNavigationStore((state) => state.isFirstPageLoad); + + const animationDelay = isFirstPageLoad ? 2 : 0.3; + const smallCardDelay = isFirstPageLoad ? 2.2 : 0.2; return (
{ initial={{ opacity: 0, y: -100 }} whileInView={{ opacity: 1, y: 0 }} viewport={{ once: true, amount: 0.3 }} - transition={{ duration: 0.6, delay: 0.7, ease: 'easeOut' }} + transition={{ duration: 0.6, delay: animationDelay, ease: 'easeOut' }} >
@@ -35,7 +41,7 @@ export const HeroSection = () => { { { { { { + const router = useRouter(); + const setNavigated = useNavigationStore((state) => state.setNavigated); + + useEffect(() => { + const handleRouteChangeComplete = () => { + setNavigated(); + }; + + router.events.on('routeChangeComplete', handleRouteChangeComplete); + + return () => { + router.events.off('routeChangeComplete', handleRouteChangeComplete); + }; + }, [router.events, setNavigated]); +}; diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 2e49ffb..d4a7e4d 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -14,6 +14,7 @@ import Gnb from '@/components/common/Gnb'; import { LoadingOverlay } from '@/components/common/LoadingOverlay'; import Splash from '@/components/Splash'; import { useInitUser } from '@/hooks/useInitUser'; +import { useSetupNavigationListener } from '@/hooks/useIsInitialLoad'; import type { AppProps } from 'next/app'; @@ -26,6 +27,7 @@ const queryClient = new QueryClient({ }); export default function App({ Component, pageProps }: AppProps) { + useSetupNavigationListener(); useInitUser(); const router = useRouter(); diff --git a/src/stores/routerStore.ts b/src/stores/routerStore.ts new file mode 100644 index 0000000..46122fb --- /dev/null +++ b/src/stores/routerStore.ts @@ -0,0 +1,14 @@ +import { create } from 'zustand'; + +interface NavigationState { + isFirstPageLoad: boolean; + setNavigated: () => void; // 네비게이션이 발생했음을 기록하는 액션 +} + +// 스토어 생성 +const useNavigationStore = create()((set) => ({ + isFirstPageLoad: true, + setNavigated: () => set({ isFirstPageLoad: false }), +})); + +export default useNavigationStore;