일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 프로그래머스 데브코스
- 고양이 사진 검색기
- 리액트
- vuex map
- netlify redirect
- nextjs사용법
- vue mixin
- 리스트 렌더링
- react next
- 폼 입력 바인딩
- 프로그래머스 데브코스 프론트엔드
- Vue
- vue 지역 컴포넌트
- Spacer
- 프로그래머스 K_Digital Training
- SCSS use
- postcss
- SCSS import
- git 같은계정 다른 컴퓨터
- 쌓임맥락
- 이벤트 수식어
- intersection opserver
- SCSS extend
- KDT 프로그래머스 데브코스 프론트엔드
- KDT 프로그래머스
- flex
- vue 이벤트 수신
- 프로그래머스 프론트엔드 데브코스
- SCSS forward
- 다른컴퓨터에서 git사용
- Today
- Total
혼자 적어보는 노트
[React] key를 사용해야하는 이유 본문
React에서 map함수를 다루다 보면 key를 사용하지 않을 시 warning을 만나게 된다.
key사용은 왜 하는걸까?
이것은 가상돔의 렌더링 과정과 관련이 있다.
key는 react의 가상 돔에서 어떤 항목을 변경하고 추가, 삭제할지 식별하는 것을 도와준다.
key는 엘리먼트에 안정적인 고유성을 부여하기 위함이여 배열 내부의 엘리먼트에 지정해주어야 한다.
리액트는 가상돔으로 이전 가상돔과 차이가 있는 부분을 찾아서 변경하는데 그 기준은
재 조정 알고리즘을 통해 정하게 된다.
재조정 알고리즘에는 두가지 가정이 있는데
1. 엘리먼트 타입이 다를 경우
- 루트엘리먼트를 비교하여 타입이 다를 경우엔 루트엘리먼트 전체를 새로 구축
- 같은 타입의 루트엘리먼트에서 속성이 다를 경우 다른 부분만 다시 갱신
2. key값이 다를 경우
자세한건 아래의 React 문서를 확인해보자
https://ko.reactjs.org/docs/reconciliation.html
map함수를 쓸 경우 같은 엘리먼트를 반복하여 사용하기 때문에 엘리먼트 타입으로 차이를 비교할수 없기 때문에
고유한 값을 key속성에 부여함으로써 리액트가 이전 가상돔과 차이를 쉽게 계산할 수 있다.
보통 데이터의 id값을 key값으로 부여하지만 map()의 두번 째 인자인 index를 사용하기도 한다.
하지만 인덱스를 key로 사용 중 배열이 재배열되면 컴포넌트의 state와 관련된 문제가 발생한다.
재배열 될 경우 각 배치된 index가 변경되기 때문이다.
index를 key값에 넣는 방법은 고유한 값이 없을 경우 최후의 수단으로 사용해야한다.
즉 key는 변하지 않고 예상 가능하며 유일한 값으로 설정 해주어야한다.
'React' 카테고리의 다른 글
[React] 비동기 setState 연속 처리 시 오류 (0) | 2021.12.15 |
---|---|
[React] input focus감지 / 영역 밖 클릭 시 이벤트 (0) | 2021.12.14 |
[React] 비동기 SetState 동기식 처리 (0) | 2021.12.10 |
[React] immer를 사용한 불변성 관리 (0) | 2021.12.09 |
[React]react에서 redux connent 코드 간소화 (0) | 2021.12.08 |