Use a List Virtualizer for Any List
Use a List Virtualizer for Any List
Section titled “Use a List Virtualizer for Any List”Use a list virtualizer like LegendList or FlashList instead of ScrollView with mapped children—even for short lists. Virtualizers only render visible items, reducing memory usage and mount time. ScrollView renders all children upfront, which gets expensive quickly.
Incorrect (ScrollView renders all items at once):
function Feed({ items }: { items: Item[] }) { return ( <ScrollView> {items.map((item) => ( <ItemCard key={item.id} item={item} /> ))} </ScrollView> )}// 50 items = 50 components mounted, even if only 10 visibleCorrect (virtualizer renders only visible items):
import { LegendList } from '@legendapp/list'
function Feed({ items }: { items: Item[] }) { return ( <LegendList data={items} // if you aren't using React Compiler, wrap these with useCallback renderItem={({ item }) => <ItemCard item={item} />} keyExtractor={(item) => item.id} estimatedItemSize={80} /> )}// Only ~10-15 visible items mounted at a timeAlternative (FlashList):
import { FlashList } from '@shopify/flash-list'
function Feed({ items }: { items: Item[] }) { return ( <FlashList data={items} // if you aren't using React Compiler, wrap these with useCallback renderItem={({ item }) => <ItemCard item={item} />} keyExtractor={(item) => item.id} /> )}Benefits apply to any screen with scrollable content—profiles, settings, feeds, search results. Default to virtualization.