import { useState, useMemo } from 'react'; export interface Actions { has: (key: K) => boolean; add: (key: K) => void; remove: (key: K) => void; reset: () => void; } const useSet = (initialSet = new Set()): [Set, Actions] => { const [set, setSet] = useState(initialSet); const utils = useMemo>( () => ({ has: item => set.has(item), add: item => setSet(prevSet => new Set([...Array.from(prevSet), item])), remove: item => setSet(prevSet => new Set(Array.from(prevSet).filter(i => i !== item))), reset: () => setSet(initialSet), }), [setSet] ); return [set, utils]; }; export default useSet;