[React] 여러 개 요소 return할 때 key값 지정하기

2022. 12. 19. 02:55·Trouble Shooting
반응형

Problem?

react 컴포넌트를 만들다가 map 안에서 여러 개의 요소를 리턴할 때 key값을 설정해주는 부분에서 헷갈리는 부분이 있었다.

const Child = ({ data }: Props) => {
  return (
    <li>
      <ul>
        {data?.map((child) => {
          return (
            <>
              <li key={`${child.id}-${child.name}-1`}>{child.name}</li>
              {child.type === 'folder' && <Child key={`${child.id}-${child.name}-2`} data={child.children} />}
            </>
          )
        })}
      </ul>
    </li>
  )
}

 

여러 요소를 리턴할 때 div로 요소들을 감싸고 key값을 지정해줘도 되지만, 아래와 같은 마크업 구조를 만들고자 했기 때문에 따로 div로 감싸고 싶지 않았다.

<ul>
  <li>Child1</li>
  <li>
    <ul>
      <li>Grand Child 1</li>
      <li>Grand Child 2</li>
    </ul>
  </li>
</ul>

 

그래서 빈 태그 <>로 감싸주고 나머지 요소들에 key값을 따로 지정해주면 될 것이라고 생각했는데 key값이 중복된다는 메시지가 콘솔에 등장했다.

 

Solution

const Child = ({ data }: Props) => {
  return (
    <li>
      <ul>
        {data?.map((child) => {
          return (
            <React.Fragment key={`${child.id}-${child.name}`}>
              <li>{child.name}</li>
              {child.type === 'folder' && <Child data={child.children} />}
            </React.Fragment>
          )
        })}
      </ul>
    </li>
  )
}

그리고 빈 태그가 아닌 React.Fragment로 감싸주면 된다는 것을 알았다. 기존의 빈 태그 대신 React.Fragment를 써주고, 거기에만 key값을 지정해주면 해결되는 문제였다.

 

빈 태그를 쓰는 것이 너무 습관이 되다 보니 Fragment를 쓸 생각을 못했던 것 같다. 😂

 

Reference

https://stackoverflow.com/questions/23840997/how-can-i-return-multiple-lines-jsx-in-another-return-statement-in-react

 

반응형

'Trouble Shooting' 카테고리의 다른 글

[Netlify] 페이지 새로고침 시 Page Not Found 오류 해결  (0) 2023.02.06
inefficient regular expression complexity in nth-check  (0) 2023.01.26
[axios, jest] Cannot use import statement outside a module 에러 해결  (0) 2022.11.14
PuTTY key format too new 오류 해결하기  (0) 2022.10.11
[Next.js] Unknown property 'jsx' found 오류 해결  (0) 2022.09.11
'Trouble Shooting' 카테고리의 다른 글
  • [Netlify] 페이지 새로고침 시 Page Not Found 오류 해결
  • inefficient regular expression complexity in nth-check
  • [axios, jest] Cannot use import statement outside a module 에러 해결
  • PuTTY key format too new 오류 해결하기
SH_Roh
SH_Roh
  • SH_Roh
    혼자공부끄적끄적
    SH_Roh
  • 전체
    오늘
    어제
    • 분류 전체보기 (159)
      • FE (39)
        • HTML, CSS (3)
        • Javascript (17)
        • React (11)
        • Next.js (4)
      • Network (1)
      • DevOps (4)
      • Git (1)
      • Trouble Shooting (24)
      • Algorithm (41)
        • Python (2)
        • Data Structure, Algorithm (7)
        • Problem Solving (31)
      • Education (23)
        • Elice AI Track (4)
        • Wanted Pre-Onboarding FE Co.. (19)
      • TIL (25)
      • Etc. (1)
        • 회고 (1)
        • 그냥저냥 (0)
  • 링크

    • Github
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
SH_Roh
[React] 여러 개 요소 return할 때 key값 지정하기
상단으로

티스토리툴바