Skip to Content

Terrain 3 — Listes

9 drills · ~10 min · Chapitre lié : 3.4

1. Le trio de props minimal d’une FlatList ?

data, renderItem (({ item }) => JSX), keyExtractor (identité stable — jamais l’index si la liste bouge).

2. Pourquoi .map() sur 500 items est-il mortel en RN et acceptable sur le web ?

Chaque item devient de vrais widgets natifs créés/mesurés d’un coup (freeze, mémoire). Le DOM encaisse mieux — et FlatList virtualise : seul le visible existe.

3. Pull-to-refresh : les deux props ?

refreshing={bool} + onRefresh={fn} (avec Query : isRefetching/refetch).

4. padding: 16 sur la liste : style ou contentContainerStyle ? Différence ?

contentContainerStyle — le padding vit DANS le contenu scrollable (premier/dernier item espacés, scroll naturel). style pose le padding sur le cadre (contenu coupé aux bords).

5. Les 3 gestes anti-re-render d’une liste performante ?

React.memo sur le composant d’item, useCallback sur les handlers passés aux items, styles statiques (pas d’objets/fonctions recréés dans renderItem).

6. Le header de stats doit scroller AVEC la liste. La prop ?

ListHeaderComponent (et jamais une FlatList dans une ScrollView — virtualisation cassée).

7. État vide soigné : la prop, et pourquoi c’est important ?

ListEmptyComponent — c’est le premier écran d’un nouvel utilisateur (et le moins testé à l’œil).

8. numColumns doit passer de 1 à 2 selon la largeur. Le piège ?

numColumns ne change pas à chaud : il faut remonter la liste — key={columns}.

9. Quand envisager FlashList, et quel est le coût de migration ?

Quand le profiler montre des saccades malgré les règles (très longues listes, feed hétérogène). API quasi identique : migration à ~5 lignes près.


👉 Terrain suivant : 4 — Expo Router