동적 라우트에서 발생하는 상태 버그 피하기 (React + Next.js)
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
React 및 Next.js를 사용하는 개발자, 특히 동적 라우트와 컴포넌트 상태 관리에 대한 이해가 필요한 중급 이상 개발자
핵심 요약
- Next.js의 동적 라우트에서 컴포넌트가 언마운트되지 않아 상태가 유지되며, 이로 인해 예상치 못한 동작 발생
컴포넌트에key
속성을 추가해 라우트 변경 시 컴포넌트 재마운트 유도useEffect
훅을 사용해images
프롭 변경 시 내부 상태를 초기화하는 방법 제시
섹션별 세부 요약
1. 문제 발생 현상
- Next.js의 동적 라우트에서 컴포넌트가 언마운트되지 않아 상태가 유지됨
- 예:
product-a
에서 선택한 이미지 인덱스가product-b
로 이동 시에도 동일하게 유지 - 이로 인해
product-b
에 해당 인덱스의 이미지가 없을 경우 기능 중단 product-b
의images
배열 길이가 충분하지 않을 경우 오류 발생
2. 원인 분석
- Next.js는 동적 라우트 변경 시 주요 컴포넌트를 언마운트하지 않고 props만 업데이트
- 컴포넌트 트리 내 자식 컴포넌트의 상태도 유지됨
- React의 컴포넌트 생명주기와 Next.js의 라우트 처리 방식이 복합적으로 작용
3. 해결 방법
컴포넌트에key
속성 추가key="product-b"
와 같이 라우트별 고유 키 설정- 라우트 변경 시 컴포넌트 언마운트 및 재마운트 유도
useEffect
훅으로images
프롭 변경 시 상태 초기화useEffect(() => { setSelectedImageIndex(0); }, [images])
와 같은 구현 예시
4. 개발자 고려사항
- 프레임워크 내부 동작 이해 필요성 강조
- React와 Next.js의 생명주기, 상태 관리 메커니즘에 대한 기본 지식 필요
- 예측 가능한 애플리케이션 개발을 위해 상태 관리 전략 수립 필요
결론
- 동적 라우트에서 상태 유지를 방지하기 위해
key
속성 사용 또는useEffect
훅으로 상태 초기화를 구현 - 프레임워크의 내부 동작 원리 이해가 중요하며, 상태 관리 전략을 명확히 수립해야 예기치 못한 버그를 방지