일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- vue3 fullpage
- Linux
- vue
- js 연산자
- 산술연산자
- html 요소 속성
- js
- html 색상적용
- bold처리
- vue fullpage
- form 주요 태그
- css 색상변경
- nvm
- 연산자
- html 이미지 표출
- css 길이단위
- map함수
- 엄격한 동등비교
- em rem 차이
- html link
- html 화면 이동
- 느슨한 비교
- React
- node
- html 엔터 입력
- CSS
- fullpage
- javascript
- html
- css 적용방법
- Today
- Total
dev_or_alive
Warning: Each child in a list should have a unique "key" prop. 본문
Warning: Each child in a list should have a unique "key" prop.
개발로 먹고살자 2021. 11. 16. 19:58React에서 Array의 map 함수를 사용하면 가끔가다 이런 경고가 보인다.
Warning: Each child in a list should have a unique "key" prop.
warning이라 당장은 실행이 가능하지만 개발을 하다보면 보기도 안좋고
잠재적으로 어떤 문제가 나올지 모르니 해결해주도록 하자.
원인 : 배열을 이용하여 요소를 그려줄 때는 key라는 고유한 값을 prop으로 전달 받아야 한다.
해결 : map을 이용해 그려주는 요소에 key 값을 부여하면 된다
아래부터는 이해를 돕기위한 설명들
이와 같이 코드를 입력하고 실행하니
Warning이 발생한다.
그럼 아무 키나 부여해보자
Encountered two children with the same key, `i'm Key!`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — the behavior is unsupported and could change in a future version.
내가 넣은 키값까지 언급하며 새로운 Waning을 뱉어준다
고유해야 한다는 걸 간과했다.
가장 간단하게 할 수 있는 map함수를 사용 할 경우 반환 받는 index를 넣어보았다.
Waning이 사라진다.
하지만 index를 key 값으로 넣는 것은 지양해야 하는 패턴이라 한다.
Why? 간단하게 설명하자면 배열에 추가와 삽입이 있을 경우에
index가 변하기 때문에 원하는 결과를 얻지 못 할 수 있다.
아래는 직접 문제점을 테스트 해 본 게시물이다.
React ) 배열의 map 함수를 쓸 때 index를 key값으로 넣으면 안된다?
https://boms-house.tistory.com/entry/Warning-Each-child-in-a-list-should-have-a-unique-key-prop Warning: Each child in a list should have a unique "key" prop. React에서 Array의 map 함수를 사용하면..
boms-house.tistory.com
그렇기 때문에 우리는 배열 내의 고유한 값인 id를 이용하여 key값으로 넣어주겠다.
이와 같이 수정해주면 문제 해결 !
나는 평소에 index를 key값으로 사용하는 습관이 있었다.
고유하면 되는거 아닌가 생각하여 human_${index} 이런식으로 사용하고는 했었는데.
게시물 작성을 위해 자료를 찾다보니
고유해야 하는 문제가 아닌 index 자체가 key 속성의 구성품이 되면 안된다는 것이었다.
평소에 크게 문제 되는 동작이 없어서 안일하게 생각 한 것 같다.
검색하다 보니 index를 키 값으로 사용해도 되는 경우가 있다고 하는데
아래 세가지의 조건을 모두 만족해야 한다
- 배열과 각 요소가 static이며 computed 되지 않고 변하지 않아야 한다.
- 데이터 내부에 id로 쓸만한 unique 값이 없을 경우
- 데이터가 결코 reordered or filtered 되지 않을 경우
앞으로 코드를 신경써서 작성해야겠다 ㅠ_ㅠ
참조 사이트
1) https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/map
'etc > Waning&Error' 카테고리의 다른 글
[JWT] JsonWebTokenError: secret or public key must be provided (0) | 2023.03.02 |
---|