Spaces:
Configuration error
Configuration error
| import { useCallback, useRef } from 'react'; | |
| /** | |
| * Hook pour debouncer les mises à jour | |
| * Évite les mises à jour excessives | |
| */ | |
| export const useDebouncedUpdates = (delay = 16) => { // 16ms = ~60fps | |
| const timeoutRef = useRef(null); | |
| const pendingUpdateRef = useRef(null); | |
| // Fonction debounced pour les mises à jour | |
| const debouncedUpdate = useCallback((updateFn) => { | |
| // Stocker la fonction de mise à jour | |
| pendingUpdateRef.current = updateFn; | |
| // Annuler le timeout précédent | |
| if (timeoutRef.current) { | |
| clearTimeout(timeoutRef.current); | |
| } | |
| // Programmer la mise à jour | |
| timeoutRef.current = setTimeout(() => { | |
| if (pendingUpdateRef.current) { | |
| pendingUpdateRef.current(); | |
| pendingUpdateRef.current = null; | |
| } | |
| }, delay); | |
| }, [delay]); | |
| // Fonction pour forcer une mise à jour immédiate | |
| const flushUpdate = useCallback(() => { | |
| if (timeoutRef.current) { | |
| clearTimeout(timeoutRef.current); | |
| timeoutRef.current = null; | |
| } | |
| if (pendingUpdateRef.current) { | |
| pendingUpdateRef.current(); | |
| pendingUpdateRef.current = null; | |
| } | |
| }, []); | |
| // Fonction pour annuler les mises à jour en attente | |
| const cancelUpdate = useCallback(() => { | |
| if (timeoutRef.current) { | |
| clearTimeout(timeoutRef.current); | |
| timeoutRef.current = null; | |
| } | |
| pendingUpdateRef.current = null; | |
| }, []); | |
| return { | |
| debouncedUpdate, | |
| flushUpdate, | |
| cancelUpdate | |
| }; | |
| }; | |