This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
LazyRow
A Jetpack Compose LazyRow component for displaying horizontally scrolling lists.
Expo UI LazyRow matches the official Jetpack Compose LazyRow API and displays a horizontally scrolling list.


Installation
If you are installing this in an existing React Native app, make sure to install expo in your project.
Usage
Basic lazy row
Each child of LazyRow is one item. Use the horizontalArrangement prop to space the items and the contentPadding prop to add padding around the list content.
Large lists
Use LazyRow.Items to render items from an array. Pass the items as data, a unique key for each item with keyExtractor, and a children function that returns the view for an item. LazyRow.Items renders only the items near the visible area and reuses them while you scroll.
Follow these rules when you render items:
- Give the
LazyRowa fixed height. Items that are not ready yet show an empty placeholder that fills the height of the row. - Define the
childrenfunction outside the component, or wrap it inuseCallback. Otherwise, the items near the visible area render again each time the component renders. - A reused view keeps the local state (
useState) of the item it showed before. Reset the state when the item changes, or keep the state outside the view. - Set
estimatedItemSizeclose to the width of your items, in density-independent pixels (dp). - Use
overscanCountto prepare more items before and after the visible items. - To update the items, pass a new
dataarray. Do not change the array in place. - Set
recycling={false}to render every item up front.
API
import { LazyRow } from '@expo/ui/jetpack-compose';
Components
Type: React.Element<LazyItemsProps<T>>
A block of recycled rows inside LazyColumn or LazyRow, mirroring the Compose
items(count, key) builder. Only a small pool of rows around the visible range is mounted,
so large data sets stay cheap. Rows that are not ready yet show a placeholder of
estimatedItemSize, or of the size last measured for that item.
Mount it as a direct child of LazyColumn or LazyRow.
(info: {
index: number,
item: T
}) => ReactElementRenders an item. Wrap it in useCallback, or every item re-renders on each parent render.
Recycled views are reused for other items, so their local state (useState) carries over.
Reset it when the item changes, or keep the state outside the view.
number • Default: 64Placeholder size in dp along the scroll axis, until an item is measured. Must be positive.
Ignored when recycling is false.
(item: T, index: number) => stringReturns a stable, unique string key, also used as the lazy list item key.
number • Default: 10Extra items to prepare on each side of the visible items. Must be a non-negative integer.
Ignored when recycling is false.
Type: React.Element<LazyRowProps>
A lazy row component that efficiently displays a horizontally scrolling list.
unionThe horizontal arrangement of items.
Can be a preset string or an object with spacedBy to specify spacing in dp.
Acceptable values are: 'center' | 'start' | 'end' | 'spaceBetween' | 'spaceAround' | 'spaceEvenly' | {
spacedBy: number
}