Skip to Content
React Native18. Mini-jeuxT5. État & hooks

Terrain 5 — État & hooks RN

9 drills · ~10 min · Chapitres liés : Partie 6

1. La règle de répartition du cours : où vivent (a) un toggle d’accordéon, (b) la session de jeu, (c) la durée du timer, (d) l’historique ?

(a) useState local · (b) store Zustand (partagé, éphémère) · (c) store settings persisté (AsyncStorage) · (d) SQLite. L’état le plus local possible, escaladé seulement si partagé/ persistant.

2. L’anti-pattern de consommation Zustand, et la forme correcte ?

const s = useSession() (tout le store → re-render à chaque changement). Correct : sélecteurs finsuseSession(s => s.score).

3. Pourquoi sélectionner une action (s => s.answer) ne cause jamais de re-render ?

Les actions sont créées une fois dans create() : référence stable à vie → le sélecteur retourne toujours la même valeur.

4. Lire le store depuis un listener non-React (BackHandler, notification) ?

useSession.getState() (et setState pour écrire) — l’accès hors composants, sans abonnement.

5. Un timer de jeu fiable : le pattern, et pourquoi pas un décrément par setInterval ?

Stocker endsAt et calculer endsAt - Date.now() (tick = simple affichage). Le JS est gelé en arrière-plan : les ticks se perdent — l’horloge, elle, ne ment pas.

6. Détecter le retour d’arrière-plan ?

AppState.addEventListener('change', s => …) — statut ‘active’ au retour (recalculer le temps, resynchroniser).

7. « Rafraîchir l’historique à chaque visite de l’onglet » : le hook, et pourquoi pas useEffect ?

useFocusEffect — l’écran reste monté sous tabs/pile : useEffect([]) ne rejoue pas à la re-visite. (Et avec Query : l’invalidation le remplace avantageusement.)

8. Persister les réglages : le middleware, et les deux options clés ?

persist(config, { name, storage: createJSONStorage(() => AsyncStorage), version })name = la clé, version+migrate pour les évolutions.

9. Que ne met-on JAMAIS dans AsyncStorage ?

Les secrets (non chiffré → expo-secure-store) et les données de masse/requêtables (historique → SQLite). AsyncStorage = préférences et petits flags.


👉 Terrain suivant : 6 — Machine d’état & timer