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 startet 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
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,TextetImage - Layout horizontal : avatar à gauche, informations à droite
- Afficher "Actif" uniquement si
isActiveest 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
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 :
<View style={[styles.badge, !inStock && styles.outOfStock]}>
Exercice 3 : Écran de profil avec sections
Exercice : Écran de profil utilisateur
Créez un écran de profil utilisateur complet avec plusieurs sections.
Sections requises :
- En-tête : avatar (100x100, cercle), nom, biographie
- Statistiques : 3 stats en ligne (Projets, Contributions, Followers)
- Informations : email, téléphone, localisation (style réglages iOS)
- Compétences : 3 compétences (même style que les informations)
Exigences :
- Utiliser
SafeAreaViewetScrollView - 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/valeurSectionCard: 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
Créez une application "Livre de recettes" avec 3 écrans et Stack Navigation.
Écrans à créer :
- É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. - É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". - Écran À propos (
app/about.tsx) : nom de l'application, description, version.
Données :
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].tsxavecuseLocalSearchParams() - Navigation avec
router.push()ouLink - Gérer le cas d'erreur (recette non trouvée)
Exercice 5 : Application complète avec Tabs
Exercice : Application de tâches multi-écrans
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 :
- Créez la structure de fichiers
- Configurez les layouts (Stack + Tabs)
- Implémentez chaque écran un par un
- 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
React Native Core Components
Référence des composants View, Text, Image, ScrollView, etc.
DocumentationExpo Router Documentation
Guide complet sur la navigation avec Expo Router
DocumentationReact Native StyleSheet
Référence de toutes les propriétés de style disponibles
DocumentationFlexbox in React Native
Guide Flexbox spécifique à React Native
Documentation