La doppia richiesta in sviluppo è quasi sicura con React 18 con StrictMode attivato, che monta e smonta i componenti apposta per rilevare effetti collaterali. Per evitarlo, assicurati che il tuo useEffect abbia una dipendenza vuota `[]` se vuoi eseguirlo solo una volta al mount, e ripulisci le richieste in sospeso con un AbortController o un flag booleano nella cleanup function perché non cerchi di aggiornare lo stato se il componente si smonta. Se hai già fatto questo e continua ad andare lento, il problema probabilmente è che stai aggiornando lo stato inutilmente o facendo render massivi; usa React DevTools Profiler per vedere dov'è che si blocca, e considera di usare `useMemo` o `useCallback` se hai molti calcoli o passi callback ai componenti figli.