36 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
FlashcardReact Native Threading Model
QuizReact Native Threading Model
Slides / VideoReact Native Threading Model
FlashcardFlatList memoization broken by inline callback
A React.memo item still re-renders on every list update — spot why this optimization fails.
const Row = React.memo(({ item, onPress }) => {
console.log('render', item.id);
return (
<TouchableOpacity onPress={() => onPress(item.id)}>
<Text>{item.title}</Text>
</TouchableOpacity>
);
});
function List({ data }) {
const [selected, setSelected] = useState(null);
const renderItem = ({ item }) => (
<Row item={item} onPress={(id) => setSelected(id)} />
);
return (
<FlatList
data={data}
renderItem={renderItem}
keyExtractor={(item) => item.id}
/>
);
}The Row is wrapped in React.memo but still re-renders every time `selected` changes. What is the bug?