Проверяет понимание совместного применения виртуализации списка и бесконечной подгрузки данных для оптимизации рендеринга больших коллекций в UI.
Виртуализация списка и бесконечная загрузка решают разные, но дополняющие друг друга задачи. Виртуализация (windowing) ограничивает количество DOM-узлов, рендеря только те элементы, которые попадают в видимую область. Бесконечная загрузка отвечает за подгрузку новых порций данных, когда пользователь приближается к концу уже загруженного набора. Совместное использование даёт возможность отображать списки из десятков тысяч элементов с плавным скроллом и минимальным потреблением памяти.
import { FixedSizeList } from 'react-window';
import { useEffect, useState } from 'react';
function VirtualInfiniteList() {
const [items, setItems] = useState([]);
const [loading, setLoading] = useState(false);
const loadMore = async () => {
if (loading) return;
setLoading(true);
const next = await fetch(`/api/items?offset=${items.length}`).then(r => r.json());
setItems(prev => [...prev, ...next]);
setLoading(false);
};
const onItemsRendered = ({ visibleStopIndex }) => {
if (visibleStopIndex >= items.length - 5) loadMore();
};
return (
<FixedSizeList
height={600}
itemCount={items.length}
itemSize={50}
onItemsRendered={onItemsRendered}
>
{({ index, style }) => <div style={style}>{items[index]?.title}</div>}
</FixedSizeList>
);
}
Итог: комбинация виртуализации и бесконечной загрузки — стандартный подход для лент, таблиц и чатов с большим объёмом данных. Применяйте её, когда список потенциально неограничен и одновременно должен оставаться отзывчивым.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию