React NativePerformance & Optimization

33 items

1

Memoized List Item Still Re-renders

Code Quiz
2

Diagnosing FlatList Scroll Jank

Quiz
3

React Native Rendering Performance Internals

Slides / Video
4

Rendering Performance Fundamentals

Flashcard
5

Native Driver Animation Gotcha

Code Quiz
6

Native Driver Animation Limits

Quiz
7

Three Pillars of RN Performance

Flashcard
8

React Native Performance Essentials

Slides / Video
9

Native Driver Animation Jank

Code Quiz
10

Native Driver Animations & JS Thread Jank

Quiz
11

FlatList Performance Props

Flashcard
12

FlatList Performance Optimization

Slides / Video
13

Killing Jank in React Native

Slides / Video
14

Eliminating Jank in React Native

Flashcard
15

FlatList memoization broken by inline callback

Code Quiz
16

FlatList Re-render & Thread Optimization

Quiz
17

FlatList & Keys Performance Basics

Slides / Video
18

FlatList Keys for List Performance

Flashcard
19

Profiling React Native Performance

Slides / Video
20

JS Thread vs UI Thread & FlatList Tuning

Flashcard
21

FlatList Memoization Broken

Code Quiz
22

FlatList Performance Optimization

Quiz
23

React Native Rendering Performance

Slides / Video
24

Optimizing FlatList & Re-renders

Flashcard
25

FlatList vs FlashList Windowing Internals

Quiz
26

FlatList vs FlashList Virtualization

Flashcard
27

FlatList vs FlashList Windowing Internals

Slides / Video
28

Hermes Engine Internals Deep Dive

Slides / Video
29

Hermes Bytecode, GC, and Startup Internals

Quiz
30

Hermes Engine Internals

Flashcard
31

Profiling Frame Drops in React Native

Slides / Video
32

Diagnosing UI Frame Drops in React Native

Quiz
33

Profiling Frame Drops in React Native

Flashcard
Code Quiz

Memoized List Item Still Re-renders

A React.memo list item re-renders on every parent update despite virtualization — find why.

Codetypescript
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?