Pourquoi mon `useEffect` s'exécute deux fois en développement ?
poze 5 months ago506 gadefr
Mon useEffect(() => { fetchData(); }, []) est appelé deux fois : je vois deux requêtes dans l'onglet Réseau. C'est un bug ?
Dyagnostik IA
Se IA ki fè l. Se pa yon repons — kominote a anba a konfime oswa korije l. Toujou verifye anvan ou fye l.
2 Repons
Non, c'est voulu. En mode développement, <StrictMode> monte, démonte puis remonte chaque composant pour vérifier que tes effets se nettoient correctement. En production, l'effet ne s'exécute qu'une fois.
La bonne réaction n'est pas de désactiver StrictMode, mais d'écrire un effet qui supporte ça :
useEffect(() => {
const ctrl = new AbortController();
fetch('/api/data', { signal: ctrl.signal })
.then(r => r.json())
.then(setData)
.catch(e => { if (e.name !== 'AbortError') setError(e); });
return () => ctrl.abort();
}, []);
Encore mieux : pour charger des données, utilise un Server Component (Next.js) ou une bibliothèque comme TanStack Query. Elles gèrent le cache et la déduplication.
Konekte pou di lòt moun si li te mache.
Petite précision : si ton effet envoie une mutation (POST), le double appel en dev est un bon signal. Les mutations ne devraient pas partir d'un useEffect au montage, mais d'un gestionnaire d'événement (clic, soumission).
Konekte pou di lòt moun si li te mache.
Sign in and verify your email to post an answer.