# VirtualList 가상 목록
긴 목록의 성능 방안입니다. 화면에 보이는 영역의 항목만 렌더링합니다. 고정 높이 모드는 itemHeight 를, 동적 높이 모드는 itemSize 함수를 사용합니다.
가상 목록
<template>
<div class="demo-col">
<p class="demo-note">고정 높이 모드: itemHeight + overscan, 천 개 데이터에서 보이는 영역만 렌더링</p>
<LhVirtualList :data="items" :height="240" :item-height="36" :overscan="6">
<template #default="{ item, index }">
<div class="vl-item" :style="{ background: index % 2 ? 'transparent' : 'var(--lh-fill-color, #f6f1ea)' }">
{{ index + 1 }}. {{ item }}
</div>
</template>
</LhVirtualList>
<p class="demo-note">동적 높이 모드: itemSize 가 각 항목의 높이를 반환</p>
<LhVirtualList :data="items" :height="200" :item-size="sizeOf">
<template #default="{ item, index }">
<div class="vl-item" :style="{ height: sizeOf(index) + 'px' }">
{{ index + 1 }}. {{ item }}(높이 {{ sizeOf(index) }}px)
</div>
</template>
</LhVirtualList>
</div>
</template>
<script>
export default {
data: () => ({
items: Array.from({ length: 1000 }, (_, i) => `작품 항목 ${i + 1}`),
}),
methods: {
sizeOf(index) {
return 28 + (index % 5) * 14
},
},
}
</script>
# Props
| 프로퍼티 | 설명 | 타입 | 기본값 |
|---|---|---|---|
| data | 데이터 소스 (항목 렌더링은 default 슬롯이 담당) | any[] | — |
| height | 컨테이너 높이 (숫자는 px) | number \| string | — |
| itemHeight | 고정 높이 모드의 항목 높이 (itemSize 와 둘 중 하나; itemSize 를 제공하면 동적 높이로 동작) | number | — |
| itemSize | 동적 높이 모드: 호출측이 각 항목의 높이를 반환 | (index: number) => number | — |
| overscan | 오버스캔 항목 수 | number | — |
| sx | sx 레이아웃 단축 프로퍼티 | — | — |
# Slots
기본 슬롯 (범위 매개변수: item 데이터 항목, index 인덱스): 목록 항목 렌더링.
팁
데모의 .vl-item 는 예시 스타일일 뿐, 라이브러리 자체에서 제공하지 않습니다.
Copyright © 2024-2026 FengMo WenXue