React
Cette fiche rassemble les notions essentielles de React, organisées par thÚmes.
Elle couvre les bases (JSX, composants, state/props), les principaux hooks, les bonnes pratiques dâarchitecture, lâĂ©cosystĂšme courant (React Router, gestion dâĂ©tat, requĂȘtes API), ainsi que des techniques dâoptimisation.
đ Bases
-
JSX : Câest une syntaxe proche du HTML qui est transformĂ©e en
React.createElement()
par Babel.
Exemple :<h1>Hello</h1>
devientReact.createElement("h1", null, "Hello")
. -
Composants : On peut créer des composants soit en fonction (modernes) soit en classe (anciens).
Exemple fonction :function Button() { return <button>OK</button>; }
. -
Props / State : Les props sont passées depuis le parent, le state est interne au composant (via
useState
).
Exemple :<User name="Alice" />
(prop) etconst [count, setCount] = useState(0)
(state). -
Rendu conditionnel : On affiche différemment selon une condition avec
? :
ou&&
.
Exemple :{isLoggedIn ? <p>Bienvenue</p> : <p>Connectez-vous</p>}
. -
Listes et keys : Chaque Ă©lĂ©ment dâune liste doit avoir une key unique et stable pour aider React au rendu.
Exemple :{users.map(u => <li key={u.id}>{u.name}</li>)}
.
đŁ Hooks principaux
-
useState : Sert à gérer un état local qui déclenche un re-render quand il change.
Exemple :const [count, setCount] = useState(0);
. -
useEffect : Permet de gérer des effets de bord (API, timers), avec dépendances et nettoyage.
Exemple :
useEffect(() => {
const timer = setInterval(() => console.log("tick"), 1000);
return () => clearInterval(timer);
}, []);
-
useRef : Stocke une valeur persistante sans re-render et donne accĂšs au DOM.
Exemple :const inputRef = useRef(); <input ref={inputRef} />
. -
useContext : Sert à partager un état global sans props drilling.
Exemple :
const ThemeContext = createContext("light");
const App = () => <ThemeContext.Provider value="dark"><Child /></ThemeContext.Provider>;
- useReducer : Alternative Ă
useState
pour un état complexe.
Exemple :const [state, dispatch] = useReducer(reducer, initialState);
. - useMemo : Mémorise un calcul coûteux.
Exemple :const value = useMemo(() => expensiveCalc(data), [data]);
. - useCallback : Mémorise une fonction pour éviter de la recréer.
Exemple :const handleClick = useCallback(() => doSomething(), []);
.
đ Organisation & bonnes pratiques
-
Lifting state up : Remonter lâĂ©tat dans le parent pour le partager entre enfants.
Exemple : unApp
gĂšrecount
et le passe Ă deux composants enfants. -
Composants contrÎlés vs non contrÎlés : Les contrÎlés utilisent
value
+onChange
, les non contrĂŽlĂ©s sâappuient sur le DOM (ref
).
Exemple contrÎlé :<input value={text} onChange={e => setText(e.target.value)} />
. -
Ăviter le props drilling : Utiliser
Context
, Redux ou Zustand pour passer des données globales.
Exemple : partager un thĂšme avecuseContext
au lieu de propager via 10 composants. -
Découper les composants : Favorise la réutilisabilité et la lisibilité.
Exemple : au lieu dâun Ă©norme formulaire, crĂ©er<InputField />
,<SubmitButton />
, etc.
đ ĂcosystĂšme React
-
React Router : Sert à gérer la navigation entre pages.
Exemple :<Route path="/about" element={<About />} />
. -
Redux / Zustand / Recoil : GÚrent des états complexes et partagés à grande échelle.
Exemple Redux :dispatch({ type: "ADD_TODO", payload: todo })
. -
Fetch API, Axios, React Query : Pour récupérer et gérer les données distantes.
Exemple :useEffect(() => { fetch("/api").then(r => r.json()).then(setData); }, []);
.
⥠Performance & optimisation
-
Virtual DOM et rĂ©conciliation : React compare deux arbres virtuels pour nâactualiser que les changements.
Exemple : si un seul<li>
change, React ne réaffiche pas toute la liste. -
React.memo : EmpĂȘche un re-render si les props nâont pas changĂ©.
Exemple :export default React.memo(MyComponent);
. -
useMemo / useCallback : Optimisent les calculs et fonctions évitant leur recréation inutile.
Exemple :const sorted = useMemo(() => data.sort(), [data]);
. -
Lazy loading : Charger un composant uniquement quand nécessaire avec
React.lazy
+Suspense
.
Exemple :
const About = React.lazy(() => import("./About"));
<Suspense fallback={<p>Loading...</p>}><About /></Suspense>
â Questions classiques
-
đ DiffĂ©rence entre state et props ?
Props = données externes immuables, State = données internes modifiables. -
đ Comment fonctionne le Virtual DOM ?
Câest une copie en mĂ©moire du DOM rĂ©el, comparĂ©e Ă chaque rendu pour appliquer uniquement les changements nĂ©cessaires. -
đ Ă quoi sert useEffect et comment Ă©viter les boucles infinies ?
Il gÚre les effets de bord ; on évite les boucles en mettant correctement le tableau de dépendances. -
đ DiffĂ©rence composant contrĂŽlĂ© / non contrĂŽlĂ© ?
ContrÎlé = React gÚre la valeur (value
), Non contrÎlé = le DOM gÚre la valeur (ref
). -
đ Comment optimiser les performances React ?
AvecReact.memo
,useMemo
,useCallback
, lazy loading, et éviter les re-rendus inutiles. -
đ Quâest-ce que le lifting state up ?
Partager un état entre plusieurs composants en le remontant au parent commun. -
đ Avantages/inconvĂ©nients Redux vs Context ?
Redux : puissant pour de gros projets (middlewares, devtools) mais plus complexe ; Context : simple pour des cas légers mais moins adapté aux gros états.