Quiz 1 — Fondamentaux & UI (P1-P5)
20 questions · ~15 min · Réponse cachée : répondez d’abord !
1. Quelle est la différence de rendu fondamentale entre React Native et une app hybride (Ionic) ?
Réponse
RN projette les composants en widgets natifs réels (TextView…) ; l’hybride affiche une page web dans une WebView. Pas de DOM ni de navigateur dans RN.
2. Citez les trois piliers de la New Architecture et leur rôle.
Réponse
JSI (appels JS↔natif directs en C++), Fabric (le renderer arbre React → widgets), TurboModules (APIs natives lazy). Hermes exécute le JS en bytecode.
3. Pourquoi le bundle JS est-il la clé des mises à jour OTA ?
Réponse
Il est séparé du binaire natif : remplaçable sans réinstallation — EAS Update livre un nouveau bundle, le conteneur ne bouge pas.
4. « Expo ou React Native ? » — pourquoi la question est-elle mal posée ?
Réponse
Expo est le framework officiel recommandé au-dessus de RN (comme Next.js sur React) — le choix réel est « RN via Expo ou RN sans framework » (ce dernier : cas d’intégration rares).
5. Que fait npx expo install que pnpm add ne fait pas ?
Réponse
Il choisit la version compatible avec le SDK Expo du projet — vital pour les libs natives (versions couplées). pnpm add reste OK pour le JS pur.
6. Expo Go vs development build : la limite structurelle du premier ?
Réponse
Expo Go est une app déjà compilée contenant SEULEMENT les modules du SDK : aucun module natif tiers, pas votre icône/scheme. Le dev build est VOTRE conteneur.
7. Le message « Text strings must be rendered within a Text component » : les deux causes typiques ?
Réponse
Texte nu dans une View, et le {count && …} où count vaut 0 (l’expression rend « 0 »).
Toujours un booléen à gauche du &&.
8. Pourquoi une image require() n’a pas besoin de dimensions, contrairement à une URI ?
Réponse
Le require est résolu au build (Metro lit les dimensions) ; l’URI n’est connue qu’au chargement → aucun espace réservé par défaut.
9. FlatList : pourquoi la virtualisation est-elle obligatoire en RN ?
Réponse
Chaque item = de vrais widgets natifs : tout rendre d’un coup (map) fige et sature la mémoire. FlatList ne crée que le visible et recycle.
10. keyboardShouldPersistTaps="handled" résout quel problème ?
Réponse
Clavier ouvert, le premier tap sur un élément de liste ne faisait QUE fermer le clavier — avec handled, l’élément reçoit son tap.
11. flexDirection et alignItems : les défauts RN, et la conséquence mentale ?
Réponse
column et stretch : l’axe principal est VERTICAL par défaut — justifyContent distribue
verticalement, alignItems gère l’horizontal (l’inverse des réflexes web en row).
12. Une View racine d’écran sans flex: 1 : le symptôme classique ?
Réponse
Le contenu « disparaît » ou le centrage n’opère pas : la View mesure son contenu au lieu de remplir l’écran — la hauteur descend du parent.
13. fontSize: 16 — seize quoi, et pourquoi c’est une bonne nouvelle ?
Réponse
Des dp (density-independent pixels) : même taille physique sur tous les écrans, zéro conversion.
14. NativeWind : que deviennent les classes au build, et la contrainte qui en découle ?
Réponse
Compilées vers du StyleSheet natif — les classes doivent être littérales dans le source
(pas de "p-" + n) : variantes par mappings d’objets.
15. Palette vs thème (tokens) : la distinction, et ce qu’elle permet ?
Réponse
La palette nomme des couleurs (cyan300) ; le thème mappe des RÔLES (surface, accent) par mode. Les composants ne parlent que les rôles → dark/light et rebranding sans les toucher.
16. app/(tabs)/history.tsx : la route, et le rôle des parenthèses ?
Réponse
Route /history — (tabs) est un groupe (organisation + layout Tabs) invisible dans
l’URL.
17. push vs replace pour l’écran de résultat d’une partie — et pourquoi ?
Réponse
replace : la partie finie sort de la pile — back depuis le résultat revient aux tabs, jamais dans le quiz terminé.
18. Les params de route arrivent toujours en quel type, et la conséquence ?
Réponse
string (ou string[]) — convertir ET valider avec des défauts sûrs (deep links forgés
possibles) : Number(x) || 10, bornes.
19. Que garantissent les typed routes — et que ne garantissent-elles pas ?
Réponse
La FORME des chemins à la compilation (faute de frappe = erreur TS, refactor exhaustif) —
pas l’EXISTENCE de la donnée (/themes/xyz compile → garde runtime).
20. Le back matériel Android pendant un flux critique : comment l’intercepter ?
Réponse
BackHandler.addEventListener('hardwareBackPress', …) avec return true (événement
consommé) → rediriger vers la confirmation. gestureEnabled: false ne gère que le swipe.