Exercices - Fondamentaux React Native

Mettez en pratique les concepts de la Séance 1 : composants primitifs, StyleSheet, Flexbox et navigation.

Comment travailler efficacement

  • Créez un projet Expo : npx create-expo-app@latest rn-exercises
  • Testez sur votre téléphone : lancez npx expo start et scannez le QR code
  • Essayez d'abord : tentez de résoudre avant de regarder la solution
  • Comprenez le code : l'objectif est de comprendre, pas de copier

Temps estimé : 2h pour les 5 exercices

Exercice 1 : Composant avec View, Text et Image

Exercice : Carte de membre

Facile

Créez un composant MemberCard qui affiche une carte de membre d'équipe.

Props attendues :

  • name : string (nom du membre)
  • role : string (rôle dans l'équipe)
  • avatar : string (URL de l'avatar)
  • isActive : boolean (afficher "Actif" si true)

Exigences :

  • Utiliser View, Text et Image
  • Layout horizontal : avatar à gauche, informations à droite
  • Afficher "Actif" uniquement si isActive est true (rendu conditionnel)
  • Dimensions de l'avatar : 60x60 pixels, arrondi (cercle)

Dans l'écran principal : Afficher 3 cartes de membres différents.

Rappel

Pour un layout horizontal, ajoutez flexDirection: 'row' au conteneur. Pour un avatar rond, utilisez borderRadius égal à la moitié de la largeur.

Exercice 2 : StyleSheet - Carte stylisée

Exercice : Carte de produit

Facile

Créez un composant ProductCard avec un style travaillé.

Props attendues :

  • name : string (nom du produit)
  • price : number (prix en euros)
  • image : string (URL de l'image)
  • inStock : boolean (disponibilité)

Exigences :

  • Image en haut de la carte (pleine largeur, hauteur 150dp)
  • Nom du produit en gras
  • Prix en bleu et en gros
  • Badge "En stock" vert ou "Rupture" rouge selon inStock
  • Ombre sur la carte (shadowColor pour iOS, elevation pour Android)
  • Coins arrondis sur la carte

Dans l'écran principal : Afficher 3 produits avec des disponibilités différentes.

Styles conditionnels

Utilisez un tableau de styles pour combiner le style de base et le style conditionnel :

jsx
<View style={[styles.badge, !inStock && styles.outOfStock]}>

Exercice 3 : Écran de profil avec sections

Exercice : Écran de profil utilisateur

Moyen

Créez un écran de profil utilisateur complet avec plusieurs sections.

Sections requises :

  1. En-tête : avatar (100x100, cercle), nom, biographie
  2. Statistiques : 3 stats en ligne (Projets, Contributions, Followers)
  3. Informations : email, téléphone, localisation (style réglages iOS)
  4. Compétences : 3 compétences (même style que les informations)

Exigences :

  • Utiliser SafeAreaView et ScrollView
  • Créer des sous-composants réutilisables (StatItem, InfoRow, SectionCard)
  • Style inspiré des réglages iOS (sections avec fond blanc, séparateurs, titres de section en majuscules)
  • Layout responsive avec Flexbox

Décomposition en composants

Créez des petits composants réutilisables :

  • StatItem : affiche une statistique (valeur + label)
  • InfoRow : affiche une ligne label/valeur
  • SectionCard : conteneur de section avec titre

C'est la même logique de composition qu'en React web (R4A10).

Exercice 4 : Navigation entre 3 écrans

Exercice : Application avec Stack Navigation

Moyen

Créez une application "Livre de recettes" avec 3 écrans et Stack Navigation.

Écrans à créer :

  1. Écran Accueil (app/index.tsx) : liste de 4 recettes. Chaque recette est cliquable et mène à l'écran détail. Un lien "À propos" en bas.
  2. Écran Détail (app/recipe/[id].tsx) : route dynamique affichant les ingrédients et les étapes de la recette sélectionnée. Gérer le cas "recette non trouvée".
  3. Écran À propos (app/about.tsx) : nom de l'application, description, version.

Données :

jsx
const recipes = [
{ id: '1', name: 'Pâtes carbonara', time: '20 min', difficulty: 'Facile' },
{ id: '2', name: 'Poulet rôti', time: '1h30', difficulty: 'Moyen' },
{ id: '3', name: 'Tarte aux pommes', time: '45 min', difficulty: 'Moyen' },
{ id: '4', name: 'Salade César', time: '15 min', difficulty: 'Facile' },
];

Exigences :

  • Stack Navigation avec _layout.tsx
  • Route dynamique [id].tsx avec useLocalSearchParams()
  • Navigation avec router.push() ou Link
  • Gérer le cas d'erreur (recette non trouvée)

Exercice 5 : Application complète avec Tabs

Exercice : Application de tâches multi-écrans

Difficile

Créez une application de gestion de tâches complète avec Tab Navigation et Stack Navigation.

Structure :

  • 3 onglets : Tâches, Statistiques, Paramètres
  • 1 écran détail accessible depuis l'onglet Tâches

Onglet Tâches :

  • Liste de tâches séparées en deux sections : "À faire" et "Terminées"
  • Chaque tâche a un indicateur de priorité (point coloré : rouge/orange/vert)
  • Appuyer sur une tâche ouvre l'écran détail (route dynamique)
  • Les tâches terminées apparaissent en grisé avec un texte barré

Onglet Statistiques :

  • Nombre total de tâches
  • Nombre de tâches terminées
  • Nombre de tâches à faire
  • Nombre de tâches à priorité haute non terminées

Onglet Paramètres :

  • Informations de l'application (réutilisez le pattern de l'exercice 3)

Écran Détail :

  • Titre de la tâche, catégorie, priorité, statut
  • Description complète
  • Gestion du cas "tâche non trouvée"

Organisation

Cet exercice combine tous les concepts de la séance. Procédez par étapes :

  1. Créez la structure de fichiers
  2. Configurez les layouts (Stack + Tabs)
  3. Implémentez chaque écran un par un
  4. Ajoutez les styles en dernier

Récapitulatif

Ce que vous avez pratiqué

Exercice 1 : Composants primitifs (View, Text, Image) avec layout horizontal

Exercice 2 : StyleSheet avec ombres, coins arrondis et styles conditionnels

Exercice 3 : Écran complet avec sections, sous-composants réutilisables et ScrollView

Exercice 4 : Stack Navigation avec route dynamique et Link/useRouter

Exercice 5 : Application complète avec Tabs + Stack + styles avancés

Temps total estimé : ~2h

Comprendre, pas mémoriser

L'objectif de ces exercices est de comprendre les patterns, pas de mémoriser la syntaxe. Quand vous travaillerez sur un vrai projet, vous pourrez toujours consulter la documentation Expo ou demander à l'IA de générer du code. L'important est de savoir valider et adapter ce code.

Ressources