33 items
Memoized List Item Still Re-renders
Code QuizDiagnosing FlatList Scroll Jank
QuizReact Native Rendering Performance Internals
Slides / VideoRendering Performance Fundamentals
FlashcardNative Driver Animation Gotcha
Code QuizNative Driver Animation Limits
QuizThree Pillars of RN Performance
FlashcardReact Native Performance Essentials
Slides / VideoNative Driver Animation Jank
Code QuizNative Driver Animations & JS Thread Jank
QuizFlatList Performance Props
FlashcardFlatList Performance Optimization
Slides / VideoKilling Jank in React Native
Slides / VideoEliminating Jank in React Native
FlashcardFlatList memoization broken by inline callback
Code QuizFlatList Re-render & Thread Optimization
QuizFlatList & Keys Performance Basics
Slides / VideoFlatList Keys for List Performance
FlashcardProfiling React Native Performance
Slides / VideoJS Thread vs UI Thread & FlatList Tuning
FlashcardFlatList Memoization Broken
Code QuizFlatList Performance Optimization
QuizReact Native Rendering Performance
Slides / VideoOptimizing FlatList & Re-renders
FlashcardFlatList vs FlashList Windowing Internals
QuizFlatList vs FlashList Virtualization
FlashcardFlatList vs FlashList Windowing Internals
Slides / VideoHermes Engine Internals Deep Dive
Slides / VideoHermes Bytecode, GC, and Startup Internals
QuizHermes Engine Internals
FlashcardProfiling Frame Drops in React Native
Slides / VideoDiagnosing UI Frame Drops in React Native
QuizProfiling Frame Drops in React Native
FlashcardMemoized List Item Still Re-renders
A React.memo list item re-renders on every parent update despite virtualization — find why.
const Row = React.memo(({ item, onPress }: RowProps) => {
console.log('render', item.id);
return (
<Pressable onPress={onPress}>
<Text>{item.label}</Text>
</Pressable>
);
});
function List({ data }: { data: Item[] }) {
const [count, setCount] = useState(0);
const renderItem = useCallback(
({ item }: { item: Item }) => (
<Row item={item} onPress={() => setCount(c => c + 1)} />
),
[]
);
return (
<FlatList
data={data}
keyExtractor={(i) => i.id}
renderItem={renderItem}
/>
);
}Every visible Row re-renders whenever ANY row is tapped, even though Row is wrapped in React.memo. What is the bug?