Skip to Content
React Native20. QuizQuiz 1 — Fondamentaux & UI

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.