Introduction - R4A11 Séance 2
Bienvenue dans la Séance 2 du cours R4A11 - État, Formulaires et Persistance. Après avoir posé les fondations du développement mobile en Séance 1, vous allez rendre vos applications interactives et capables de conserver des données.
Ce que vous avez accompli en Séance 1
En Séance 1, vous avez appris à :
- Créer un projet React Native avec Expo et le tester avec Expo Go
- Utiliser les composants primitifs : View, Text, Image, ScrollView, SafeAreaView
- Appliquer des styles avec StyleSheet.create() et Flexbox
- Naviguer entre écrans avec Expo Router (Stack, Tabs, routes dynamiques)
Vous avez déjà les bases
Vous savez construire des écrans et naviguer entre eux. Il manque deux éléments pour créer une application utile : la saisie utilisateur (formulaires) et le stockage de données (persistance). C'est le programme de cette séance.
Pourquoi la gestion d'état sur mobile ?
Une application mobile sans état est une application qui ne fait rien. L'état permet de :
- Réagir aux actions de l'utilisateur : saisie de texte, appui sur un bouton, sélection d'un élément
- Afficher des données dynamiques : liste de tâches, paramètres, messages
- Conserver des données entre les sessions : préférences, brouillons, données hors ligne
Du web au mobile : même logique, nouveaux défis
En R4A10 (Séance 3), vous avez appris useState et les formulaires contrôlés en React web. Ces concepts s'appliquent directement en React Native. Mais le mobile ajoute des contraintes que le web n'a pas :
// React web (R4A10) - formulaire avec useState
function LoginForm() {
const [email, setEmail] = useState('');
return (
<input
type="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
/>
);
}
// React Native (R4A11) - même logique, composants différents
function LoginForm() {
const [email, setEmail] = useState('');
return (
<TextInput
keyboardType="email-address"
value={email}
onChangeText={setEmail} // pas onChange !
autoCapitalize="none" // spécifique mobile
/>
);
}
Contraintes spécifiques au mobile
Le mobile impose des défis que le web ne connaît pas :
- Le clavier virtuel couvre la moitié de l'écran quand il apparaît
- L'application peut passer en arrière-plan (appel téléphonique, notification)
- La connexion réseau peut disparaître à tout moment
- Les données doivent persister entre les relances de l'application
Ces contraintes ne changent pas la logique React, mais elles nécessitent des composants et des patterns adaptés.
Ce que vous allez construire
Durant cette séance, vous allez progressivement construire les briques d'une application de notes/tâches :
- Saisie de texte : ajouter des notes avec TextInput
- Gestion de liste : ajouter, supprimer, marquer comme fait avec useState
- Formulaire complet : saisie avec validation et gestion du clavier
- Persistance : sauvegarder les données avec AsyncStorage pour les retrouver après fermeture
- Mode hors ligne : gérer l'absence de connexion
// Aperçu de ce que vous saurez construire à la fin de cette séance
function NotesApp() {
const [notes, setNotes] = useState([]);
const [text, setText] = useState('');
// Charger les notes sauvegardées au démarrage
useEffect(() => {
AsyncStorage.getItem('notes').then(data => {
if (data) setNotes(JSON.parse(data));
});
}, []);
// Sauvegarder à chaque modification
useEffect(() => {
AsyncStorage.setItem('notes', JSON.stringify(notes));
}, [notes]);
const addNote = () => {
if (text.trim()) {
setNotes([...notes, { id: Date.now(), text, done: false }]);
setText('');
Keyboard.dismiss(); // Fermer le clavier
}
};
return (
<KeyboardAvoidingView style={{ flex: 1 }} behavior="padding">
{/* Liste des notes + formulaire d'ajout */}
</KeyboardAvoidingView>
);
}
Ce que vous allez apprendre
Objectifs de la Séance 2
À la fin de cette séance, vous serez capable de :
- Gérer l'état sur mobile : useState avec les spécificités mobiles (clavier, arrière-plan)
- Utiliser TextInput : saisie de texte, types de clavier, mots de passe
- Créer des formulaires : composants contrôlés, KeyboardAvoidingView, validation
- Comprendre le cycle de vie : useEffect, AppState, useFocusEffect
- Persister des données : AsyncStorage (équivalent mobile de localStorage)
- Gérer le mode hors ligne : détecter la connexion, stratégie offline-first
Structure du parcours
Cette séance suit une progression logique :
- État sur mobile : rappel useState et spécificités mobiles
- TextInput : le composant de saisie de texte
- Formulaires : formulaires contrôlés et gestion du clavier
- Cycle de vie : useEffect et événements mobiles (AppState, focus)
- AsyncStorage : persister des données localement
- Mode offline : gérer l'absence de connexion
- Exercices et projet : mise en pratique
Liens avec R4A10
| Concept R4A10 | Séance R4A10 | Équivalent R4A11 Séance 2 |
|---|---|---|
useState | Séance 3 | Même hook, mêmes règles + gestion clavier |
<input> contrôlé | Séance 3 | <TextInput> avec onChangeText |
| Validation de formulaires | Séance 3 | Même logique + KeyboardAvoidingView |
useEffect | Séance 4 | Même hook + AppState et useFocusEffect |
localStorage | Séance 4 | AsyncStorage (asynchrone, même API) |
Philosophie : comprendre, pas mémoriser
Comprendre, pas mémoriser
L'objectif n'est PAS de tout mémoriser !
Votre vrai objectif est de :
- Reconnaître les patterns : formulaire contrôlé, persistance, cycle de vie
- Adapter votre code React web au contexte mobile (TextInput au lieu de input, AsyncStorage au lieu de localStorage)
- Savoir gérer les contraintes mobiles : clavier, arrière-plan, hors ligne
- Valider le code généré par l'IA en comprenant les patterns de données
L'IA peut générer du code, mais vous devez comprendre pourquoi on utilise AsyncStorage, comment fonctionne KeyboardAvoidingView, et quand sauvegarder les données.
Prérequis
Avant de commencer
Assurez-vous d'avoir suivi :
- R4A10 Séance 3 : useState, événements, formulaires contrôlés
- R4A10 Séance 4 : useEffect (chargement de données, effets de bord)
- R4A11 Séance 1 : composants primitifs, StyleSheet, navigation
Si ces concepts ne sont pas clairs :
- useState et formulaires : R4A10 Séance 3
- useEffect : R4A10 Séance 4
- Composants React Native : R4A11 Séance 1
Pages de cette séance
État sur mobile
useState, listes, et spécificités mobiles
TextInput
Saisie de texte, types de clavier, mots de passe
Formulaires
Formulaires contrôlés, validation, KeyboardAvoidingView
Cycle de vie
useEffect, AppState, useFocusEffect
AsyncStorage
Persistance locale des données
Mode Offline
Gestion de la connectivité et mode hors ligne
Ressources
React Native Documentation
Documentation officielle de React Native
DocumentationExpo Documentation
Documentation officielle d'Expo
DocumentationR4A10 Séance 3 - État et Formulaires
Prérequis : useState et formulaires contrôlés en React web
DocumentationR4A10 Séance 4 - useEffect et Données
Prérequis : useEffect, fetch, chargement de données
Documentation