# Rendre le tout interactif : formulaires, etat et donnees

Jusqu'ici, ta landing page est une belle page statique — elle est superbe mais ne *fait* rien. Dans cette lecon, on la rend interactive. Quand quelqu'un tape son email et clique sur "Envoyer", des choses vont se passer.

## Qu'est-ce que le "state" ?

<div class="concept-box">
<h4>Concept</h4>
Le <strong>state</strong> (etat) est la memoire a court terme de l'application. Quand un utilisateur tape dans un champ de formulaire, l'application doit se souvenir de ce qu'il a tape. Quand il clique sur envoyer, l'application doit se souvenir si l'envoi a reussi ou echoue. Ces valeurs temporaires et changeantes sont le "state".
</div>

En React (la bibliotheque derriere Next.js), le state est gere avec un outil appele `useState`. Tu n'as pas besoin d'ecrire ce code — Claude le fera — mais comprendre le concept t'aide a mieux diriger Claude.

Par exemple, ton formulaire d'inscription aura un state pour :
- Le texte de l'email que l'utilisateur est en train de taper
- Si le formulaire est en cours d'envoi (chargement)
- Si l'envoi a reussi ou echoue
- Les messages d'erreur a afficher

## Construire le formulaire d'inscription

Transformons le formulaire provisoire de la Lecon 5 en un vrai formulaire interactif :

<div class="try-it">
<h4>Essaie</h4>
Dans Claude Code, tape :<br><br>
<strong>"Update the email signup form in the hero section to be fully interactive. It should:
- Validate that the email is a real email format before submitting
- Show a loading spinner on the submit button while processing
- After 'submission' (just simulate it with a 1-second delay for now), show a green checkmark icon and the message 'Thanks! You're on the list.'
- If the email is invalid, show a red error message below the input: 'Please enter a valid email address.'
- The input should clear after successful submission
- Make the form a client component (add 'use client' at the top)"</strong>
</div>

Claude creera ou mettra a jour le composant formulaire avec toute cette logique. Verifie ton navigateur — essaie d'envoyer avec un email valide et invalide pour voir les deux cas fonctionner.

## Gerer l'envoi du formulaire

Pour l'instant, le formulaire affiche un message de succes apres un faux delai. Il n'*envoie* pas encore vraiment l'email quelque part — nous le connecterons a un vrai backend dans la Lecon 7.

Voici ce qui se passe sous le capot :
1. L'utilisateur tape son email (le state se met a jour a chaque frappe)
2. L'utilisateur clique sur Envoyer (le state passe a "chargement")
3. Le formulaire valide le format de l'email
4. Si valide : simule une requete reseau, puis affiche l'etat de succes
5. Si invalide : affiche l'etat d'erreur

<div class="concept-box">
<h4>Concept</h4>
Ce pattern — <strong>capturer la saisie, valider, envoyer, afficher le resultat</strong> — c'est ainsi que chaque formulaire dans chaque application au monde fonctionne. Tu viens d'en construire un en le decrivant en francais.
</div>

## Ajouter des animations et du polish

Un peu d'animation fait une grande difference pour donner un aspect professionnel a ton application :

<div class="try-it">
<h4>Essaie</h4>
Essaie ces prompts un par un dans Claude Code :
<br><br>
1. <strong>"Add a subtle fade-in animation when the page loads. Each section should fade in with a slight delay."</strong><br><br>
2. <strong>"Make the submit button have a hover effect — slightly brighter color and a subtle shadow lift."</strong><br><br>
3. <strong>"When the success message appears, animate it with a smooth fade-in and scale-up from 95% to 100%."</strong>
</div>

## Problemes courants et comment les resoudre

En tant que debutant, tu vas rencontrer des problemes. Voici comment utiliser Claude pour les corriger :

**"Le formulaire ne fait rien quand je clique sur envoyer"**
Dis a Claude : *"The form submit button doesn't seem to work. Can you check the onClick/onSubmit handler and make sure it's wired up correctly?"*

**"La page est cassee sur mobile"**
Dis a Claude : *"The form looks broken on mobile — the input and button are overlapping. Fix the responsive layout."*

**"J'ai une erreur dans le terminal"**
Copie le message d'erreur exact et colle-le a Claude : *"I'm getting this error: [colle l'erreur]. What's wrong and how do I fix it?"*

<div class="pro-tip">
<h4>Astuce pro</h4>
Pour le debogage, partage toujours le <strong>message d'erreur exact</strong> avec Claude. Ne le paraphrase pas. Le texte de l'erreur contient des informations specifiques dont Claude a besoin pour diagnostiquer le probleme.
</div>

**"La page est vide / affiche un ecran blanc"**
Cela signifie generalement qu'il y a une erreur JavaScript. Ouvre les Outils de developpement de ton navigateur (F12), va dans l'onglet Console, et partage ce que tu vois avec Claude.

## Checkpoint Git

Ton formulaire est interactif, valide et anime. Sauvegarde ta progression :

```
git add .
git commit -m "interactive signup form with validation and animations"
```

<div class="honest-note">
<h4>Note honnete</h4>
Les fonctionnalites interactives sont la ou les choses peuvent devenir delicates. L'envoi simule que nous avons construit fonctionne parfaitement en developpement, mais le connecter a un vrai serveur (prochaine lecon) introduit de nouveaux defis : erreurs reseau, connexions lentes, conditions de concurrence. L'IA gere la plupart de ca bien, mais comprendre que ces defis existent t'aidera a poser les bonnes questions a Claude.
</div>

## Point cle

Les fonctionnalites interactives sont la ou les applications prennent vie. Tu construis maintenant quelque chose qui *repond* aux saisies des utilisateurs — validation d'emails, affichage d'etats de chargement, affichage de resultats. Et tu l'as fait en ayant une conversation avec l'IA.

<div class="checkpoint">
<h4>Checkpoint</h4>
Ton formulaire d'inscription valide les emails, affiche l'etat de chargement, et montre des messages de succes/erreur avec des animations fluides. Git commite. Prochaine etape : ajouter un vrai backend pour stocker ces emails.
</div>
