반응형
🔍 문제 상황
React에서 컴포넌트 리스트를 .map()으로 렌더링할 때, 다음과 같은 에러가 자주 발생합니다:
Warning: Each child in a list should have a unique 'key' prop.
그래서 보통은 아래처럼 key를 추가하죠.
items.map((item) => (
<MyComponent key={item.id} item={item} />
))
하지만! 정상적으로 key를 넣었음에도 불구하고 위와 같은 경고가 계속 발생하는 경우가 있습니다.
❓ 대체 왜?
이 문제의 진짜 원인은… 바로 Fragment (<>...</>) 때문입니다.
💥 문제 코드 예시
items.map((item) => (
<>
<MyComponent key={item.id} item={item} />
</>
))
위 코드는 MyComponent에 key를 넣었지만,
사실상 무시되고 있습니다.
왜냐하면, React는 .map()으로 직접 리턴하는 최상위 노드에 key가 있는지를 보기 때문입니다.
즉, 위의 코드는:
- Fragment가 최상위인데 key 없음 → ❌
- 내부 MyComponent에 있는 key → 무시됨 → ❌ 경고 발생
✅ 해결 방법
방법 1: Fragment 없애기 (권장)
items.map((item) => (
<MyComponent key={item.id} item={item} />
))
방법 2: Fragment에 key 넣기 (가능하지만 비권장)
items.map((item) => (
<React.Fragment key={item.id}>
<MyComponent item={item} />
</React.Fragment>
))
💡 실전 예: React Native ScrollView 안에서 발생한 사례
<ScrollView>
{items.map((item) => (
<>
<TimelineItem key={item.id} item={item} />
</>
))}
</ScrollView>
이 구조에서 Fragment가 key를 무시하면서 경고가 발생했습니다.
→ Fragment를 제거하거나, key를 Fragment로 올리면 해결됩니다!
🧠 정리
구조 key 인식 여부 추천 여부
<Component key={...} /> | ✅ | ✅ 강력 추천 |
<><Component key={...} /></> | ❌ | ❌ 경고 발생 |
<Fragment key={...}><Component /></Fragment> | ✅ | ⚠️ 가능하지만 가독성 저하 우려 |
✅ 마무리
React에서 key 경고가 사라지지 않을 때는
"내가 넣은 key가 최상위 엘리먼트에 있는가?" 를 꼭 확인하세요!
특히, 아무 생각 없이 쓴 <> ... </> 가 문제의 원인일 수 있습니다 😉
반응형
'programing > App' 카테고리의 다른 글
[Flutter]UUID 사용법 완벽 정리 – v1, v4, v5 차이점과 예제까지 (1) | 2025.04.03 |
---|---|
[Flutter macOS] 앱을 항상 위에 고정(Always on Top) + 기본 창 크기 설정하는 방법 (1) | 2025.04.01 |
[React Native/Expo] uuid 사용 시 crypto.getRandomValues() 에러 해결하기 (0) | 2025.03.26 |
[React Native] Cannot read property of undefined – default export vs named export 완전 정복 (0) | 2025.03.26 |
React Native에서 Pressable vs TouchableOpacity: 어떤 걸 써야 할까? (1) | 2025.03.25 |