React Custom Hooks
Repositorio centralizado de hooks React reutilizables que cubren gestión de estado, efectos secundarios, APIs del navegador e interacción del usuario. Escrito en TypeScript con documentación completa.
Tecnologías Utilizadas
Enlaces
Descripción del Proyecto
Cada proyecto React en el que trabajo termina necesitando las mismas utilidades: debouncing, sincronización con local storage, detección de clic fuera, media queries y más. En lugar de copiar código entre proyectos o instalar múltiples paquetes pequeños, creé un repositorio centralizado de hooks que puedo reutilizar en todos lados.
Esta librería es mi toolkit personal que he refinado a través de múltiples proyectos, asegurando que cada hook esté bien testeado, correctamente tipado y siga las mejores prácticas de React.
Características
- Más de 20 hooks cubriendo casos de uso comunes
- Cero dependencias - solo React como peer dependency
- Soporte completo de TypeScript con inferencia de tipos apropiada
- Tree-shakeable - solo importás lo que necesitás
- Compatible con SSR - seguro para Next.js y otros frameworks SSR
- Completamente testeado con cobertura de tests completa
Instalación
npm install @qazuor/react-hooks# opnpm add @qazuor/react-hooks# oyarn add @qazuor/react-hooksHooks Disponibles
Gestión de Estado
- useBoolean - Estado booleano con métodos
setTrue,setFalse,toggle - useToggle - Estado toggleable con persistencia opcional
- useQueue - Cola FIFO con operaciones
enqueue,dequeue
Efectos Secundarios
- useTimeout - Ejecución retrasada de callback con
start,stop,reset - useInterval - Callbacks recurrentes con funcionalidad de pausa/reanudación
- useHandledInterval - Intervalo mejorado con soporte de delay aleatorio
- useDebounce - Debouncing de valores con delay configurable
APIs del Navegador
- useLocalStorage - Estado persistente sincronizado con localStorage
- useSessionStorage - Gestión de almacenamiento de sesión
- useCopyToClipboard - Utilidades de lectura/escritura del portapapeles
- useMediaQuery - Matching reactivo de media queries
- useNetworkState - Detección de conectividad de red
- useVisibilityChange - Monitoreo de visibilidad del documento
- useWindowWidth - Tracking de dimensiones de ventana
Interacción del Usuario
- useClickOutside - Detectar clics fuera de un elemento
- useIdleness - Monitorear actividad/inactividad del usuario
- usePageLeave - Detectar cuando el usuario abandona la página
- useLockBodyScroll - Prevenir scroll del body (modales, overlays)
- useMeasure - Dimensiones de elementos via ResizeObserver
Desarrollo
- useLogger - Logging de desarrollo con tracking de ciclo de vida
Ejemplo de Uso
import { useLocalStorage, useDebounce, useClickOutside,} from '@qazuor/react-hooks';
function SearchDropdown() { const [query, setQuery] = useLocalStorage('search-query', ''); const debouncedQuery = useDebounce(query, 300); const dropdownRef = useClickOutside<HTMLDivElement>(() => { setIsOpen(false); });
useEffect(() => { if (debouncedQuery) { fetchResults(debouncedQuery); } }, [debouncedQuery]);
return ( <div ref={dropdownRef}> <input value={query} onChange={(e) => setQuery(e.target.value)} /> {/* Dropdown de resultados */} </div> );}Detalles Técnicos
Requisitos
- React 18.2+
- TypeScript 4.9+ (para usuarios de TypeScript)
Tamaño del Bundle
Cada hook es importable independientemente, así que solo incluís en el bundle lo que usás. La librería entera está bajo 5KB gzipped.
Hooks Futuros
Planeando agregar:
usePrevious- Trackear valor previouseAsync- Gestión de estado de operaciones asyncuseIntersectionObserver- Detección de visibilidad en viewportuseGeolocation- API de geolocalización del navegadoruseEventListener- Gestión simplificada de event listeners
Métricas del Proyecto
Características Destacadas
- 20+ hooks cubriendo casos de uso comunes
- Cero dependencias - solo React como peer dependency
- Soporte completo de TypeScript con excelente inferencia de tipos
- Tree-shakeable - solo importás lo que usás
- SSR safe - compatible con Next.js y otros
- Bundle bajo 5KB gzipped para la librería completa
Desafíos y Soluciones
Compatibilidad SSR - Hooks accediendo a window rompían en SSR
Chequeos typeof window !== 'undefined' con valores iniciales seguros
Memory leaks en intervalos - Timers no limpiados al desmontar
Limpieza rigurosa en funciones de retorno de useEffect
Inferencia de tipos compleja - Genéricos para hooks con múltiples overloads
Firmas de overload bien definidas más tests de tipos
¿Por Qué Este Stack?
Excelente inferencia de tipos para consumidores del hook
Testing rápido con gran DX
Tamaño de bundle mínimo, sin conflictos de versión
Mejoras Futuras
- usePrevious - Trackear valor previo
- useAsync - Gestión de estado de operaciones async
- useIntersectionObserver - Detección de visibilidad en viewport
- useGeolocation - API de geolocalización del navegador
- useEventListener - Gestión simplificada de event listeners