VariableSizeList: 동적 행 높이
VariableSizeList와 itemSize 콜백 패턴을 사용해 높이가 서로 다른 항목을 처리합니다.
VariableSizeList: 동적 행 높이은(는) CoddyKit의 무료 React Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 React Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
항목의 높이가 서로 다른 경우
행의 높이가 일정하지 않은 경우가 있습니다. 채팅 목록에 짧은 메시지와 긴 메시지가 섞여 있거나, 피드에 콘텐츠 양이 서로 다른 카드가 있을 수 있습니다. FixedSizeList는 하나의 일정한 itemSize를 가정하므로 이런 경우를 처리할 수 없습니다.
이런 경우 react-window에서는 각 항목이 자체 크기를 지정할 수 있는 목록 유형을 제공합니다.
VariableSizeList로 FixedSizeList 대체하기
VariableSizeList는 항목별 크기를 받는다는 점을 제외하면 FixedSizeList와 같은 방식으로 작동합니다. 대신 VariableSizeList를 가져오고 주어진 index의 크기를 반환하는 함수를 제공하면 됩니다.
나머지 요소인 children 렌더링 함수와 핵심 style 속성은 그대로이므로 변경 작업이 작습니다.
함수로 사용하는 itemSize
VariableSizeList에서 itemSize는 index를 받아 해당 행의 픽셀 단위 높이를 반환하는 함수입니다. react-window는 이 함수를 호출해 오프셋을 계산하고 표시 영역을 결정합니다.
이를 통해 알려진 높이를 표현할 수 있습니다. 예를 들어 이미지가 있는 항목에는 더 높은 행을, 일반 텍스트에는 더 낮은 행을 지정할 수 있습니다.
사전 계산과 측정 비교
각 행의 높이를 미리 알고 있다면 itemSize 함수에서 그 값을 직접 반환할 수 있습니다. 높이가 렌더링된 콘텐츠에 따라 달라진다면 행이 그려진 후 측정해야 합니다.
사전 계산된 높이는 가장 단순하고 빠르며, 측정한 높이는 더 유연하지만 크기를 목록에 다시 전달하려면 추가 작업이 필요합니다.
측정 후 resetAfterIndex 호출
VariableSizeList는 성능을 위해 항목 오프셋을 캐시합니다. 측정한 높이가 변경되면 목록의 ref에서 resetAfterIndex 메서드를 호출하여 해당 인덱스부터 이후 위치를 다시 계산해야 합니다.
이를 잊으면 오래된 오프셋이 남아 행의 위치가 어긋나므로, resetAfterIndex는 동적 측정을 작동시키는 핵심입니다.
높이의 딜레마
닭이 먼저냐 달걀이 먼저냐와 같은 문제가 있습니다. 행을 렌더링하려면 높이가 필요하지만 실제 높이는 렌더링한 후에야 알 수 있습니다. 목록은 행을 측정하기 전에 먼저 배치해야 합니다.
이를 해결하려면 먼저 추정값으로 렌더링한 다음 실제 높이를 알게 되었을 때 수정해야 합니다.
추정, 렌더링, 측정, 업데이트
일반적인 패턴은 추정 높이로 행을 렌더링하고, ref 또는 ResizeObserver를 사용해 렌더링 후 실제 높이를 측정하고, 측정값을 저장한 다음 resetAfterIndex를 호출해 위치를 업데이트하는 것입니다.
이 반복 과정은 빠르게 수렴하므로 첫 번째 측정 단계가 끝나면 목록이 올바른 오프셋으로 안정됩니다.
getItemSize는 안정적이어야 합니다
itemSize 함수는 렌더링 간에 안정적이어야 하며, 일반적으로 useCallback으로 감싸 목록이 캐시한 오프셋을 계속 무효화하지 않도록 합니다.
인라인으로 정의한 불안정한 함수는 불필요한 재계산을 일으켜 가상화가 제공하려는 성능을 떨어뜨릴 수 있습니다.
성능상의 절충
VariableSizeList는 일정한 오프셋을 가정할 수 없고 각 항목의 크기를 추적해야 하므로 FixedSizeList보다 더 많은 작업을 수행합니다. 높이를 측정하는 경우에는 추가 측정에도 비용이 발생합니다.
행의 높이가 실제로 서로 다른 목록에서는 이 비용을 감수할 만하지만, 행의 높이가 일정하다면 FixedSizeList가 여전히 더 빠르고 간단한 선택입니다.
근사값으로 고정 크기 방식 사용하기
정확한 동적 측정에 비용이 너무 많이 든다면 때로는 근사할 수 있습니다. 행을 몇 가지 고정 높이 분류로 나누거나 적절한 평균값을 사용하면 FixedSizeList를 계속 사용할 수 있습니다.
이 방법은 픽셀 단위로 완벽한 배치를 단순성과 속도와 맞바꾸는 방식이며, 오프셋의 작은 부정확성을 허용할 수 있을 때 적절한 절충안입니다.
빠른 확인: VariableSizeList의 itemSize
VariableSizeList가 각 행의 높이를 어떻게 알아내는지 떠올려 보세요.
복습: VariableSizeList
VariableSizeList는 itemSize에 인덱스를 받는 함수를 전달하여 높이가 서로 다른 행을 처리합니다. 높이는 미리 계산하거나 측정할 수 있으며, 측정한 높이를 사용하려면 resetAfterIndex와 함께 추정-렌더링-측정-업데이트 순환이 필요합니다.
useCallback을 사용하여 itemSize 함수를 안정적으로 유지하세요. FixedSizeList보다 비용이 많이 들므로 행의 높이가 일정하거나 근사로 충분한 경우에는 고정 크기 변형을 우선 사용하세요.
자주 묻는 질문
“VariableSizeList: 동적 행 높이” 강의는 무료인가요?
네 — “VariableSizeList: 동적 행 높이” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 React Academy 강의 전체를 잠금 해제할 수 있습니다. React Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“VariableSizeList: 동적 행 높이”에서 뭘 배우나요?
VariableSizeList와 itemSize 콜백 패턴을 사용해 높이가 서로 다른 항목을 처리합니다. 브라우저에서 직접 실행하는 실습 코드로 React Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
React Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 React Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“VariableSizeList: 동적 행 높이” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 React Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 React Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 대규모 목록 렌더링 문제
- FixedSizeList: 수천 개 항목 렌더링
- VariableSizeList: 동적 행 높이
- 가상화와 데이터 가져오기 결합