Terrain 7 — Réseau & offline
9 drills · ~10 min · Chapitres liés : Partie 7
1. Pourquoi n’y a-t-il pas de CORS en RN, et la contrepartie de sécurité ?
✅
Pas de navigateur → pas de same-origin policy : tout appel passe. Contrepartie : tout ce qui est dans l’app est public (l’APK se décompile) — jamais de clé secrète embarquée.
2. Le pattern timeout d’un fetch RN ?
✅
AbortController + setTimeout(() => controller.abort(), ms) → fetch(url, { signal }).
Pas d’option native.
3. staleTime vs gcTime en une phrase chacun ?
✅
staleTime = durée de fraîcheur (frais → zéro réseau ; stale → servi + refetch en fond). gcTime = rétention en mémoire d’une donnée inutilisée.
4. Les deux branchements RN spécifiques de TanStack Query ?
✅
onlineManager ← NetInfo (reconnexion) et focusManager ← AppState (retour au premier
plan) — les équivalents des événements window du web.
5. L’architecture des questions de Drill en une phrase (l’ADR 0001) ?
✅
Un repo GitHub public (manifest.json + un JSON par thème) servi par
raw.githubusercontent.com, fetché + validé zod + caché offline — mise à jour = git push,
zéro serveur.
6. Parse strict vs safeParse dans le pipeline de questions : qui, où, pourquoi ?
✅
Strict sur l’enveloppe du fichier (corrompu = erreur franche) ; safeParse par question (une invalide = ignorée avec warning, le jeu continue). Tolérance proportionnée au rayon du dégât.
7. À quoi sert schemaVersion dans les JSON ?
✅
Le contrat d’évolution : une vieille app rejette proprement un format plus récent (message clair) au lieu de crasher — et une app neuve peut accepter plusieurs versions.
8. La matrice réseau×cache : que voit l’utilisateur hors ligne AVEC cache ? Hors ligne SANS cache ?
✅
Avec : les données + bandeau « hors ligne » (un mode, pas une erreur). Sans : ErrorState + retry + le thème mélange bundlé (première ouverture dans l’avion : jouable quand même).
9. Pourquoi ne copie-t-on jamais data de Query dans Zustand — et l’exception de Drill ?
✅
Deux sources de vérité divergent. Exception : la session copie les questions tirées — un snapshot de partie voulu figé (le refetch ne change pas une partie en cours).
👉 Terrain suivant : 8 — SQLite