📚 Ressources & Cheatsheet React
Référence rapide pour tous les concepts de la formation.
🪝 Hooks — Référence rapide
useState
const [state, setState] = useState(initialValue)
État local. Déclenche un re-render à chaque changement.
useEffect
useEffect(() => { /* effet */ return cleanup; }, [deps])
Effets de bord. [] = une fois, [dep] = quand dep change, sans tableau = à chaque render.
useRef
const ref = useRef(null) → ref.current
Référence mutable sans re-render. DOM access ou valeur persistante.
useMemo / useCallback
useMemo(() => calcul, [deps]) | useCallback(fn, [deps])
Mémoïsation. useMemo = valeur, useCallback = fonction.
useReducer
const [state, dispatch] = useReducer(reducer, initialState)
État complexe avec actions. Préféré à useState quand ≥3 états liés.
useContext
const value = useContext(MonContext)
Consomme un Context sans prop drilling.
🧩 Patterns courants
Context + Custom Hook
const ThemeCtx = createContext(null);
function ThemeProvider({ children }) {
const [theme, setTheme] = useState('dark');
return <ThemeCtx.Provider value={{ theme, setTheme }}>{children}</ThemeCtx.Provider>;
}
function useTheme() {
const ctx = useContext(ThemeCtx);
if (!ctx) throw new Error('Missing ThemeProvider');
return ctx;
}
Formulaire contrôlé
function Form() {
const [data, setData] = useState({ nom: '', email: '' });
const handle = (e) => setData(prev => ({ ...prev, [e.target.name]: e.target.value }));
return <form><input name="nom" value={data.nom} onChange={handle} /></form>;
}
Fetch avec états
function useFetch(url) {
const [data, setData] = useState(null);
const [loading, setLoading] = useState(true);
const [error, setError] = useState(null);
useEffect(() => {
const ctrl = new AbortController();
fetch(url, { signal: ctrl.signal })
.then(r => r.json()).then(setData)
.catch(e => { if (e.name !== 'AbortError') setError(e.message); })
.finally(() => setLoading(false));
return () => ctrl.abort();
}, [url]);
return { data, loading, error };
}
🗺️ React Router v6 — Référence
Composants
BrowserRouter— wrapper racineRoutes + Route— définir les routesLink to="/"— navigationNavLink— lien avec état actifNavigate to="/"— redirection JSXOutlet— routes enfants
Hooks
useNavigate()→ navigate('/path')useParams()→ { id, slug }useSearchParams()→ [params, set]useLocation()→ { pathname, ... }
⚡ Performance — Quand utiliser quoi ?
| Technique | Quand | Ne pas utiliser si |
|---|---|---|
| React.memo | Composant se re-rend souvent avec mêmes props | Props changent souvent |
| useMemo | Calcul coûteux (>1ms) avec dépendances stables | Calcul simple — overhead > gain |
| useCallback | Fonction passée à un composant mémoïsé | Composant enfant non mémoïsé |
| lazy + Suspense | Page/composant lourd non affiché au démarrage | Composant toujours visible |
| Virtualisation | Liste > 100 items | Petites listes |
🔗 Liens utiles
Documentation officielle
- react.dev — Documentation React officielle
- reactrouter.com — React Router v6
- tanstack.com — TanStack Query/Virtual
Outils recommandés
- Vite — bundler ultra-rapide
- React DevTools — extension Chrome/Firefox
- TypeScript — typage statique
- ESLint + react-hooks plugin
Librairies populaires
- Zustand / Jotai — state management
- TanStack Query — data fetching
- React Hook Form — formulaires
- shadcn/ui — composants UI