Tuto React: expliquer pourquoi App n'affiche ni Header ni Footer (majuscule = composant vs balise HTML, pas d'erreur), + verifs import/export

This commit is contained in:
2026-06-23 15:50:25 +02:00
parent e8448d229c
commit b43c9989f4
+49
View File
@@ -209,6 +209,55 @@ export default App;
>
> 🔎 Tu reconnais le `export` / `import` ? C'est exactement les **modules** — l'idée « j'écris un truc dans un fichier, je le réutilise dans un autre ». React s'appuie là-dessus en permanence.
### ⚠️ « J'ai bien créé mes composants, mais `App` n'affiche NI le Header NI le Footer ! »
C'est **le** piège n°1 du débutant en React, et il est sournois car **il n'y a aucune erreur** dans la console. La cause la plus fréquente : la **majuscule**.
En JSX, le navigateur distingue deux choses **uniquement par la première lettre** :
| Tu écris | React comprend | Résultat |
|---|---|---|
| `<header />` (minuscule) | la **balise HTML** native `<header>` | un `<header>` **vide** → rien de visible |
| `<Header />` (Majuscule) | **TON composant** `Header` | ton vrai contenu s'affiche ✅ |
Et là est le piège : `header` et `footer` **existent pour de vrai** en HTML ! Donc si tu écris :
```jsx
function App() {
return (
<div>
<header /> {/* ❌ React rend une balise HTML <header> VIDE, pas ton composant */}
<footer /> {/* ❌ pareil : balise vide */}
</div>
);
}
```
…React ne se plaint pas (ce sont des balises HTML valides), mais il affiche des éléments **vides** → tu ne vois ni ton Header ni ton Footer. **Aucune erreur**, juste du vide. C'est exactement ton symptôme.
### ✅ La correction : une **majuscule** au début
```jsx
import Header from "./components/Header";
import Footer from "./components/Footer";
function App() {
return (
<div>
<Header /> {/* ✅ Majuscule → React utilise TON composant */}
<Footer />
</div>
);
}
```
> 💡 **À retenir :** en React, **un composant s'écrit toujours avec une Majuscule** (`<Header />`), justement pour que React le distingue d'une balise HTML (`<header />`). Minuscule = balise HTML ; Majuscule = ton composant. C'est **obligatoire**, pas une convention de style.
### Les 2 autres causes possibles (si ce n'est pas la majuscule)
1. **Oubli de l'`import`** en haut de `App.jsx` → là, tu auras une **erreur** (`Header is not defined`). Vérifie que chaque composant utilisé est bien importé.
2. **Oubli de l'`export default`** dans le fichier du composant → l'import ramène « rien » → erreur React `Element type is invalid`. Vérifie que chaque fichier de composant finit par `export default MonComposant;`.
> 🔎 Réflexe de débogage : ouvre la **Console (F12)**. **Erreur rouge** → c'est l'import ou l'export (causes 1/2). **Aucune erreur mais du vide** → c'est presque toujours la **majuscule**.
---
## 8. Rendre un composant configurable : les **props**