Warning: Each child in a list should have a unique "key" prop.
React에서 map함수를 사용하는 것에 재미가 들려 여기저기 사용해보던 중.
다음과 같은 코드에서 에러가 지속되었다.
index.js:1 Warning: Each child in a list should have a unique "key" prop.
<NavList
onMouseEnter={this.isHoverMenu}
onMouseLeave={this.isHoverMenu}
>
{NAV_DATA.map(({ id, name, link, menu }) => {
return (
<>
<List key={id} onMouseEnter={() => this.setHoverMenu(id)}>
<NavLink to={link}>{name}</NavLink>
</List>
{id === hoveredMenuId && <SubMenu menu={menu} />}
</>
);
})}
</NavList>
이리보고 저리보고 다시 봐도
나는 '각 자식 요소에 유니크한 키 값 key={id}부여하고 있었다. (고 생각했다.)
✅ map 함수의 규칙 : 사용될 요소의 최상위 요소에 key 값을 부여해야함.
기존의 코드를 다시 보면 key값이 부여된 요소인 <List> 는 최상위가 아니었다.
최상위에 <></>가 있다. 즉, fragement가 최상위 요소였던 것.
❓ 그럼 저 빈 태그 모습을한 fragement에도 key값을 부여할 수 있는지?
'Fragments uniqe key' 검색
https://ko.reactjs.org/docs/fragments.html
fragement는
<React.Fragment></React.Fragment>형식으로 사용 가능하다.
:: 수정한 코드
<NavList
onMouseEnter={this.isHoverMenu}
onMouseLeave={this.isHoverMenu}
>
{NAV_DATA.map(({ id, name, link, menu }) => {
return (
<React.Fragment key={id}>
<List onMouseEnter={() => this.setHoverMenu(id)}>
<NavLink to={link}>{name}</NavLink>
</List>
{id === hoveredMenuId && <SubMenu menu={menu} />}
</React.Fragment>
);
})}
</NavList>
반응형
'D.evelop > React' 카테고리의 다른 글
[React]fetch함수와 api를 이용한 통신 실습 (0) | 2021.11.01 |
---|---|
[React]Link컴포넌트 사용 시 TypeError (0) | 2021.10.31 |
[React]라이프사이클 Lifecycle (+unique key prop에러) (0) | 2021.10.06 |
[React]terminal에서 npm종료 할 때, 단축키 "ctrl + c" (0) | 2021.09.27 |
[React]에러 "Module not found: Can't resolve 파일 in 경로'' (0) | 2021.09.22 |
댓글