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 Ă
useStatepour 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 : unAppgĂšrecountet 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 avecuseContextau 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.