에러문구
Each child in an array should have a unique “key” prop.
브라우저가 변화를 감지하고 DOM이 렌더링 될 때 virtualDOM 과 realDOM 을 비교하여 변화가 감지 된 부분만 업데이트 된 새로운 DOM을 연산한다.
최소한의 업데이트만 줄 수 있다면 DOM은 효율적으로 운용될 수 있다.
먼저 이전 가상 돔과 ui가 변경 후 가상 돔을 비교를 한다.
바뀐 부분만 실제 돔에 diff -> patch를 시키게 된다.
key가 없을 때는 리스트를 순차적으로 비교하며 변화를 감지한다.
단순히 3을 추가하게 됐을 때 실제 돔에 3번만 입력하게 되지만
순서에 맞지않게 1앞에 3을 넣게된다면 리액트가 아예 다른 리스트로 인식하게 되어서 1, 2번도 다시 diff-patch를 하게 된다.
li태그를 다 리렌더링 하게 되기에 비효율적인 운영이 된다.
이 경우 key를 추가해서 1, 2을 새롭게 그리는 것이 아닌 3을 추가 후 1, 2는단순히 자리 이동만 시키게 도와준다.
새로 맨앞에 들어온 리스트가 그 전에 있던 index를 key값으로 가져가기 때문에 인덱스와 리스트가 꼬이게 되는 현상을 확인 할 수 있다.