Fast & performant React Native list. No more blank cells.
Swap from FlatList in seconds. Get instant performance.
Add the package to your project via yarn add @exodus/flash-list
and run pod install
in the ios
directory.
We recommend reading the detailed documentation for using FlashList
.
But if you are familiar with FlatList, you already know how to use FlashList
. You can try out FlashList
by changing the component name and adding the estimatedItemSize
prop or refer to the example below:
import React from "react";
import { View, Text } from "react-native";
import { FlashList } from "@exodus/flash-list";
const DATA = [
{
title: "First Item",
},
{
title: "Second Item",
},
];
const MyList = () => {
return (
<FlashList
data={DATA}
renderItem={({ item }) => <Text>{item.title}</Text>}
estimatedItemSize={200}
/>
);
};
To avoid common pitfalls, you can also follow these steps for migrating from FlatList
, based on our own experiences:
- Switch from
FlatList
toFlashList
and render the list once. You should see a warning about missingestimatedItemSize
and a suggestion. Set this value as the prop directly. - Important: Scan your
renderItem
hierarchy for explicitkey
prop definitions and remove them. If you’re doing a.map()
use indices as keys. - Check your
renderItem
hierarchy for components that make use ofuseState
and verify whether that state would need to be reset if a different item is passed to that component (seeRecycling
) - If your list has heterogenous views, pass their types to
FlashList
usinggetItemType
prop to improve performance. - Do not test performance with JS dev mode on. Make sure you’re in release mode.
FlashList
can appear slower while in dev mode due to a small render buffer.
The fixture
is an example app showing how to use the library.