99 반복문 key 값에 관한 고찰..
source: categories/study/vue-experiance/vue-experiance_9-99.md
99 반복문 key 값에 관한 고찰..
key 값이 필요한 이유?
- 리액트든 뷰든 반복문을 작성하면 해당 컴포넌트 또는 요소에
key
값을 부여해야된다. - 이는 리액트, 뷰가 변경 사항을 알아내는 것을 돕기 위해서이다.
뷰, 리액트?
- 뷰, 리액트는 UI를 만들어내는 라이브러리로 화면의
view
를 담당한다. - 그리고 컴포넌트 기반으로 되어있어 컴포넌트의 조합으로 원하는 UI를 만들어내거나 특정 컴포넌트를 원하는 만큼 보여주기 편리하다는 장점이 있다.
- 무엇보다
Virtual DOM
을 이용해 화면에서 변경이 필요한 부분만 변경하기 때문에 효율성이 좋아 속도가 빠르다.
뷰, 리액트는 항상 효율성이 좋을까?
- 그렇지는 않다.
-
변경이 필요한 부분만 변경할 수 있을 때 효율이 좋은 것이다.
- 리액트, 뷰는
state
를 사용해 변경 사항이 있는 부분을 재렌더링 하는데, 만약 불필요한 재렌더링이 자주 발생하게되면 효율적이지 않다. - 그래서 리액트, 뷰가 변경된 부분을 쉽게 알아차릴 수 있도록
key
가 필요하다.
<li>a: apple</li>
<li>b: banana</li>
<li>c: cantaloupe</li>
- 예를 들어, 화면에 위와 같은 코드로 작성된 내용이 보여지고 있는데, 중간에 banana가 삭제되었다.
- 이 상황에서
key
가 없다면 리스트를 순차적으로 모두 비교해서 차이가 있는 부분을 찾아내야 한다. - 그런데 리스트의 아이템마다 부여된 고유 값인
key
가 있다면 리액트, 뷰가 자동으로key
를 어떤 컴포넌트를 업데이트할지 판단하는데에 사용하기 때문에 빠른 판단을 할 수 있다. -
key
를 이용해 기존에 있던key
가 없어졌다면 해당 아이템을 삭제하고 기존에 없던key
가 생기면 새 아이템을 만든다. - 리액트, 뷰 공식 홈페이지의
key
항목을 살펴보면 동적인 리스트를 만들 때마다 적절한key
를 할당할 것을 강력하게 권고하고 있다. -
또한,
key
로 사용할만한 항목이 없을 경우 데이터의 재구성까지 고려해보길 권유한다. - 반복문의 두번째 인자로 배열의 인덱스를 넘겨 사용할 수도 있지만, 이는 성능 향상에 도움이 되는 실질적인
key
값이 되지 못하기 때문에 추천되지 않는 방법이다.