UseSet
guarahooks/use-setFreeHook
Manages a Set of items with ease.
Live preview
live · rendered by the registry
Rendered by guarahooks on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://guarahooks.com/r/use-set.jsonSource
1'use client';23import { useCallback, useMemo, useState } from 'react';45export type UseSetResult<T> = {6 set: Set<T>;7 add: (item: T) => void;8 delete: (item: T) => void;9 has: (item: T) => boolean;10 clear: () => void;11 reset: () => void;12 setValue: (newSet: Set<T>) => void;13 getAll: () => T[];14};1516export function useSet<T>(initialSet: Iterable<T> = []): UseSetResult<T> {17 const [set, setSet] = useState<Set<T>>(() => new Set(initialSet));18 const initial = useMemo(() => new Set(initialSet), [initialSet]);1920 const add = useCallback((item: T) => {21 setSet((prev) => {22 if (prev.has(item)) return prev;23 const next = new Set(prev);24 next.add(item);25 return next;26 });27 }, []);2829 const deleteItem = useCallback((item: T) => {30 setSet((prev) => {31 if (!prev.has(item)) return prev;32 const next = new Set(prev);33 next.delete(item);34 return next;35 });36 }, []);3738 const has = useCallback((item: T) => set.has(item), [set]);3940 const clear = useCallback(() => {41 setSet(new Set());42 }, []);4344 const reset = useCallback(() => {45 setSet(new Set(initial));46 }, [initial]);4748 const setValue = useCallback((newSet: Set<T>) => {49 setSet(new Set(newSet));50 }, []);5152 const getAll = useCallback(() => Array.from(set), [set]);5354 return {55 set,56 add,57 delete: deleteItem,58 has,59 clear,60 reset,61 setValue,62 getAll,63 };64}
Files it writes
More from guarahooks
All 100 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| UseAbortControlleruse-abort-controller | guarahooks | Hooks | Free | no deps | |
| UseArrayStateuse-array-state | guarahooks | Hooks | Free | no deps | |
| UseAxiosuse-axios | guarahooks | Hooks | Free | no deps | |
| UseBatteryStatususe-battery-status | guarahooks | Hooks | Free | no deps | |
| UseBetterAuthuse-better-auth | guarahooks | Hooks | Free | no deps | |
| UseClickOutsideuse-click-outside | guarahooks | Hooks | Free | no deps | |
| UseConfirmuse-confirm | guarahooks | Hooks | Free | no deps | |
| UseCookieuse-cookie | guarahooks | Hooks | Free | no deps |
