- Fully cross-platform.
- Configurable viewability callbacks.
- List header support.
- List footer support.
- Item separator support.
- Section header support.
- Section separator support.
- Heterogeneous data and item rendering support.
- Pull to Refresh.
- Scroll loading.
Example
- Internal state is not preserved when content scrolls out of the render window. Make sure all your data is captured in the item data or external stores like Flux, Redux, or Relay.
- This is a
PureComponentwhich means that it will not re-render ifpropsremain shallow-equal. Make sure that everything yourrenderItemfunction depends on is passed as a prop (e.g.extraData) that is not===after updates, otherwise your UI may not update on changes. This includes thedataprop and parent component state. - In order to constrain memory and enable smooth scrolling, content is rendered asynchronously offscreen. This means it’s possible to scroll faster than the fill rate and momentarily see blank content. This is a tradeoff that can be adjusted to suit the needs of each application, and we are working on improving it behind the scenes.
- By default, the list looks for a
keyprop on each item and uses that for the React key. Alternatively, you can provide a customkeyExtractorprop.
Reference
Props
VirtualizedList props
Inherits VirtualizedList Props.renderItem Required
Default renderer for every item in every section. Can be over-ridden on a per-section basis. Should return a React element.
The render function will be passed an object with the following keys:
- ‘item’ (object) - the item object as specified in this section’s
datakey - ‘index’ (number) - Item’s index within the section.
- ‘section’ (object) - The full section object as specified in
sections. - ‘separators’ (object) - An object with the following keys:
- ‘highlight’ (function) -
() => void - ‘unhighlight’ (function) -
() => void - ‘updateProps’ (function) -
(select, newProps) => void- ‘select’ (enum) - possible values are ‘leading’, ‘trailing’
- ‘newProps’ (object)
- ‘highlight’ (function) -
sections Required
The actual data to render, akin to the data prop in FlatList.
extraData
A marker property for telling the list to re-render (since it implementsPureComponent). If any of your renderItem, Header, Footer, etc. functions depend on anything outside of the data prop, stick it here and treat it immutably.
initialNumToRender
How many items to render in the initial batch. This should be enough to fill the screen but not much more. Note these items will never be unmounted as part of the windowed rendering in order to improve perceived performance of scroll-to-top actions.ItemSeparatorComponent
Rendered in between each item, but not at the top or bottom. By default,highlighted, section, and [leading/trailing][Item/Section] props are provided. renderItem provides separators.highlight/unhighlight which will update the highlighted prop, but you can also add custom props with separators.updateProps. Can be a React Component (e.g. SomeComponent), or a React element (e.g. <SomeComponent />).
keyExtractor
Used to extract a unique key for a given item at the specified index. Key is used for caching and as the React key to track item re-ordering. The default extractor checksitem.key, then falls back to using the index, like React does. Note that this sets keys for each item, but each overall section still needs its own key.
ListEmptyComponent
Rendered when the list is empty. Can be a React Component (e.g.SomeComponent), or a React element (e.g. <SomeComponent />).
ListFooterComponent
Rendered at the very end of the list. Can be a React Component (e.g.SomeComponent), or a React element (e.g. <SomeComponent />).
ListHeaderComponent
Rendered at the very beginning of the list. Can be a React Component (e.g.SomeComponent), or a React element (e.g. <SomeComponent />).
renderSectionFooter
Rendered at the bottom of each section.renderSectionHeader
Rendered at the top of each section. These stick to the top of theScrollView by default on iOS. See stickySectionHeadersEnabled.
Parameters:
Valid
params keys are:
- ‘animated’ (boolean) - Whether the list should do an animation while scrolling. Defaults to
true. - ‘itemIndex’ (number) - Index within section for the item to scroll to. Required.
- ‘sectionIndex’ (number) - Index for section that contains the item to scroll to. Required.
- ‘viewOffset’ (number) - A fixed number of pixels to offset the final target position, e.g. to compensate for sticky headers.
- ‘viewPosition’ (number) - A value of
0places the item specified by index at the top,1at the bottom, and0.5centered in the middle.
SectionSeparatorComponent
Rendered at the top and bottom of each section (note this is different fromItemSeparatorComponent which is only rendered between items). These are intended to separate sections from the headers above and below and typically have the same highlight response as ItemSeparatorComponent. Also receives highlighted, [leading/trailing][Item/Section], and any custom props from separators.updateProps.
stickySectionHeadersEnabled
Makes section headers stick to the top of the screen until the next one pushes it off. Only enabled by default on iOS because that is the platform standard there.Methods
flashScrollIndicators() iOS (Vega Not Available)
Type definitions
Section
An object that identifies the data to be rendered for a given section.
Properties:

