React의 Key 프로퍼티: 중요성과 올바른 사용법
React의 key
프로퍼티는 React가 컴포넌트 배열에서 어떤 항목이 변경, 추가 또는 제거되었는지 식별하는 데 사용됩니다. 이는 React의 Virtual DOM 비교 알고리즘인 Reconciliation 과정에서 중요한 역할을 합니다. key
는 효율적인 렌더링을 가능하게 하며, 성능 최적화와 버그 방지를 돕습니다.
주요 특징
- 고유성:
key
는 배열 내에서 각 항목이 고유해야 합니다.- 같은 부모 요소 내에서만 고유하면 되며, 전체 애플리케이션에서 유일할 필요는 없습니다.
- 불변성:
- 항목의 순서가 변경되거나 새로운 항목이 추가되더라도 React는
key
를 기준으로 비교하므로,key
값이 변하지 않도록 관리해야 합니다.
- 항목의 순서가 변경되거나 새로운 항목이 추가되더라도 React는
- 성능 최적화:
key
가 없거나 고유하지 않으면 React는 항목 전체를 다시 렌더링합니다.- 고유한
key
를 사용하면 React가 변경된 항목만 업데이트할 수 있어 성능이 향상됩니다.
key
를 사용하는 이유
- 효율적인 업데이트:
- React는 이전 상태와 새로운 상태를 비교하여 필요한 부분만 DOM에 반영합니다. 이를 위해 각 요소를 식별할 수 있는 고유한 식별자가 필요합니다.
- 예상 가능한 동작:
key
가 없으면 React는 리스트 항목의 순서를 제대로 추적하지 못해 의도치 않은 동작이 발생할 수 있습니다. 예를 들어, 입력 필드가 포함된 리스트에서key
를 올바르게 설정하지 않으면 입력값이 엉뚱한 필드에 복사되는 문제가 생길 수 있습니다.
사용 예시
기본 사용
const items = ['React', 'Vue', 'Angular'];
function FrameworkList() {
return (
<ul>
{items.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
);
}
더 나은 key
사용
위의 예제에서는 index
를 key
로 사용했지만, 항목 고유 식별자가 있다면 이를 사용하는 것이 더 좋습니다.
const items = [
{ id: 1, name: 'React' },
{ id: 2, name: 'Vue' },
{ id: 3, name: 'Angular' }
];
function FrameworkList() {
return (
<ul>
{items.map(item => (
<li key={item.id}>{item.name}</li>
))}
</ul>
);
}
key
사용 시 주의사항
- 배열 인덱스를
key
로 사용하는 것을 피하라:- 배열의 순서가 변경되거나 항목이 추가/삭제될 때 문제를 일으킬 수 있습니다.
- 데이터가 정적이고 변하지 않을 때는 인덱스를 사용해도 괜찮지만, 권장되지는 않습니다.
- 고유 식별자 사용:
- 데이터베이스나 API에서 제공하는 고유 ID를 사용하는 것이 이상적입니다.
- 예: UUID, 데이터베이스 기본 키 등.
key
는 렌더링되지 않는다:key
는 내부적으로만 사용되며, DOM 요소의 속성으로 렌더링되지 않습니다.
FAQ
1. key
를 잘못 사용하면 어떤 문제가 생기나요?
- 성능 저하: React가 불필요하게 전체 리스트를 다시 렌더링할 수 있습니다.
- 데이터 무결성 문제: React가 항목을 잘못 식별하여 상태가 올바르게 전달되지 않을 수 있습니다.
2. key
를 생략하면 어떻게 되나요?
- React가 기본적으로 배열 인덱스를
key
로 사용합니다. 이는 권장되지 않으며 예상치 못한 동작을 초래할 수 있습니다.
요약
React에서 key
는 리스트 항목의 고유성을 보장하기 위해 반드시 필요하며, 성능 최적화와 코드의 안정성을 유지하는 데 중요한 역할을 합니다. 고유한 값을 선택해 사용하는 것이 중요하며, 배열 인덱스는 특별한 경우를 제외하고 사용하지 않는 것이 좋습니다.
Leave a comment