【React】리스트의 렌더링으로 map()를 사용할 때 key가 필요한 이유
키가 없는 목록의 예
const ImageList = (props) => {
const images = props.images.map((image) => {
return (
<img src={image.urls.regular} alt={image.description} /> //keyがない
);
});
return <div>{images}</div>;
};
key에 적절한 값을 추가하면 Warning은 사라집니다만, 왜 key가 필요한지에 대해서는 솔직히 알지 못했습니다.
그래서 이번에는 React에서 목록을 만들 때 각 요소에 key가 필요한 이유에 대해 정리했습니다.
React의 이해가 모호하다고 느끼고 있는 분들의 참고가 되면 다행입니다.
결론
React에서 목록을 만들 때 각 요소에 key가 필요한 이유는 key가 없으면 성능에 영향을 미치기 때문입니다.
설명
다음과 같이 여러 항목 목록에 새 항목을 추가할 때 어떻게 렌더링되는지 생각해 봅시다.
기존 아이템(아무로, 카미유, 쥬도)에 대해서는 이미 렌더링되어 있기 때문에 DOM에 이미 존재하고 있습니다.
여기에 새로운 아이템(배너지)을 추가했을 때, React 내부에서 새롭게 렌더링 하는 리스트와 기존(변경전)의 DOM의 비교를 실시합니다만, key 가 없으면 어느 것이 같은 요소인가 어떤가를 판단하는 것 수 없습니다.
따라서 기존 아이템을 포함한 모든 요소를 렌더링하게 됩니다.
한편, 리스트의 각 요소에 독특한 key를 더해 주면, 기존 DOM과 요소를 비교할 때, key에 의해 같은 요소인지 어떤지를 판단할 수 있게 됩니다.
따라서 새로 추가한 차이의 요소만 렌더링하면 됩니다.
결론
React의 표시 퍼포먼스에 대해서도 몇 개나 기사를 쓰고 있으므로, 참고가 되면 다행입니다. ·
참고 자료
Reference
이 문제에 관하여(【React】리스트의 렌더링으로 map()를 사용할 때 key가 필요한 이유), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/suzuki0430/items/3e44128f583672251a8d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
다음과 같이 여러 항목 목록에 새 항목을 추가할 때 어떻게 렌더링되는지 생각해 봅시다.
기존 아이템(아무로, 카미유, 쥬도)에 대해서는 이미 렌더링되어 있기 때문에 DOM에 이미 존재하고 있습니다.
여기에 새로운 아이템(배너지)을 추가했을 때, React 내부에서 새롭게 렌더링 하는 리스트와 기존(변경전)의 DOM의 비교를 실시합니다만, key 가 없으면 어느 것이 같은 요소인가 어떤가를 판단하는 것 수 없습니다.
따라서 기존 아이템을 포함한 모든 요소를 렌더링하게 됩니다.
한편, 리스트의 각 요소에 독특한 key를 더해 주면, 기존 DOM과 요소를 비교할 때, key에 의해 같은 요소인지 어떤지를 판단할 수 있게 됩니다.
따라서 새로 추가한 차이의 요소만 렌더링하면 됩니다.
결론
React의 표시 퍼포먼스에 대해서도 몇 개나 기사를 쓰고 있으므로, 참고가 되면 다행입니다. ·
참고 자료
Reference
이 문제에 관하여(【React】리스트의 렌더링으로 map()를 사용할 때 key가 필요한 이유), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/suzuki0430/items/3e44128f583672251a8d
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【React】리스트의 렌더링으로 map()를 사용할 때 key가 필요한 이유), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/suzuki0430/items/3e44128f583672251a8d텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)