const numbers = [1, 2, 3, 4, 5];
{/*배열의 각 요소를 li태그 안에 넣는다.*/}
const listItems = numbers.map((numbers) =>
<li>{numbers}</li>
);
const root = ReactDOM.createRoot(document.getElementById('root'));
{/*listItems 함수 실행 결과를 ul태그 안에 넣는다.*/}
root.render(<ul>{listItems}</ul>);
key가 필요한 이유
공식문서에 따르면, 리액트는 key를 통해 기존 트리와 이후 트리의 자식들이 일치하는지 확인한다고 한다.
//기존 트리
<ul>
<li key="2015">Duke</li>
<li key="2016">Villanova</li>
</ul>
//이후 트리
<ul>
<li key="2014">Connecticut</li>
<li key="2015">Duke</li>
<li key="2016">Villanova</li>
</ul>
배열의 index를 key값으로 사용하면 되지 않을까?
오늘 동기 한 분의 발표를 들으면서 index를 key값으로 사용하면 안된다는 사실을 알았다.
배열의 데이터를 바뀌면 index값이 꼬일 수 있기 때문이다.
공식문서에도 이 내용이 나와있다.
- 인덱스를 key로 사용하면, 항목의 순서가 바뀌었을 때 key 또한 바뀔 것입니다. 그 결과로, 컴포넌트의 state가 엉망이 되거나 의도하지 않은 방식으로 바뀔 수도 있습니다.
출처1) react 공식페이지-lists-and-keys
출처2) react 공식페이지-recursing-on-children)