map()을 활용해서 리스트를 만들다 보면 이런 에러가 나타난다.
리스트의 각 아이템에는 고유한 key prop이 필요하다는 에러.
Key는 왜 필요한걸까?
Key가 필수도 아니고 안 써도 작동하지만 필수처럼 쓰이는 권장사항이다.
Key는 React가 동적 리스트나 반복 요소를 렌더링 할 때
어떤 항목을 변경하거나 추가, 삭제하는 것에 대한 식별을 돕는다.
식별자를 제공하면 리액트가 요소 간의 변경을 더 효율적으로 추적할 수 있고
업데이트도 더 빠르게 처리할 수 있다.
아이템의 재사용 관리도 더 쉬워지며 예상치 못한 버그나 렌더링 이슈도 방지할 수 있다.
엘리먼트의 안정적인 고유성을 부여하기 위해서는
배열 내부의 엘리먼트에 Key를 지정해야 한다.
데이터의 ID를 key로 지정하는 것이 고유하게 식별할 수 있기에
가장 좋은 방법일 수 있다.
Key는 배열 안에서 형제 사이에 고유해야 하고
전체 범위에서 두 개의 다른 배열에서는 동일한 key를 사용할 수 있다.
출처:
https://ko.legacy.reactjs.org/docs/lists-and-keys.html
Key를 index로 지정할 수도 있지만
성능저하나 컴포넌트 state관련된 문제가 발생할 수 있다.
리액트에서 인덱스를 key를 사용한다면 리스트 아이템이 추가나 삭제될 때마다
인덱스가 변경되는 것을 생각해봐야 한다.
이 경우에 리액트는 매번 컴포넌트를 업데이트를 해야 해서 성능에 부담을 줄 수 있다.
이는 재사용에서도 동일한 인덱스를 가진 아이템이 위치가 변경될 때 문제가 발생될 수 있다.
접근성이나 유지보수 측면에서도 고유한 식별자나 속성을 key로 사용하는 것이
리액트의 업데이트를 더 효율적으로 처리할 수 있고 버그를 방지할 수 있다.
https://robinpokorny.medium.com/index-as-a-key-is-an-anti-pattern-e0349aece318
'02_STUDY > React' 카테고리의 다른 글
고유한 아이디나 키 생성하는 방법 ( 타임스탬프 활용, uuid ) (0) | 2023.10.17 |
---|---|
useQuery 쓸 때, Query data cannot be undefined 에러 (0) | 2023.10.16 |
[ React ] 함수형 컴포넌트의 렌더링은 'null'을 반환하여 막는다. (0) | 2023.08.28 |
[ React ] 클래스 컴포넌트와 함수형 컴포넌트의 이벤트 핸들러 비교 (0) | 2023.08.28 |
[ React ] 카운트 값을 감소하는 함수, 음수값이 나오지 않도록 만들기 (0) | 2023.08.27 |