11'use client' ;
22
33import Image from 'next/image' ;
4- import React , { useState } from 'react' ;
4+ import React , { useState , useMemo } from 'react' ;
55import { ImageGridProps } from '@/types/activityDetailType' ;
66
7- export default function ImageGrid ( { mainImage, subImages } : ImageGridProps ) {
7+ function ImageGrid ( { mainImage, subImages } : ImageGridProps ) {
88 const images = [ mainImage , ...subImages ] ;
9- const [ currentIndex , setCurrentIndex ] = useState ( 0 ) ; //캐러셀 구현용 state
109
11- // 첫번째 이미지면 마지막 이미지로 아니면 -1
10+ const [ currentIndex , setCurrentIndex ] = useState ( 0 ) ;
11+
1212 const prevSlide = ( ) => {
1313 setCurrentIndex ( ( prev ) => ( prev === 0 ? images . length - 1 : prev - 1 ) ) ;
1414 } ;
1515
16- // 현재 마지막 이미지면 첫 이미지로 아니면 +1
1716 const nextSlide = ( ) => {
1817 setCurrentIndex ( ( prev ) => ( prev === images . length - 1 ? 0 : prev + 1 ) ) ;
1918 } ;
@@ -24,24 +23,24 @@ export default function ImageGrid({ mainImage, subImages }: ImageGridProps) {
2423 < div className = 'relative block aspect-square h-[300px] w-full overflow-hidden rounded-lg md:hidden' >
2524 < Image
2625 src = { images [ currentIndex ] }
27- alt = { `${ currentIndex + 1 } ` }
26+ alt = { `슬라이드 이미지 ${ currentIndex + 1 } ` }
2827 fill
2928 className = 'object-cover hover:animate-pulse'
3029 />
31-
3230 < button
3331 onClick = { prevSlide }
32+ aria-label = '이전 이미지'
3433 className = 'absolute top-1/2 left-2 -translate-y-1/2 rounded-full bg-black/50 px-6 py-10 text-white'
3534 >
3635 ‹
3736 </ button >
3837 < button
3938 onClick = { nextSlide }
39+ aria-label = '다음 이미지'
4040 className = 'absolute top-1/2 right-2 -translate-y-1/2 rounded-full bg-black/50 px-6 py-10 text-white'
4141 >
4242 ›
4343 </ button >
44-
4544 < div className = 'absolute bottom-2 left-1/2 flex -translate-x-1/2 gap-1' >
4645 { images . map ( ( _ , i ) => (
4746 < div
@@ -81,3 +80,5 @@ export default function ImageGrid({ mainImage, subImages }: ImageGridProps) {
8180 </ >
8281 ) ;
8382}
83+
84+ export default React . memo ( ImageGrid ) ;
0 commit comments