UNPKG

ahooks

Version:
38 lines (37 loc) 955 B
import { useState } from 'react'; import useMemoizedFn from '../useMemoizedFn'; function useSet(initialValue) { const getInitValue = () => new Set(initialValue); const [set, setSet] = useState(getInitValue); const updateSet = (updater) => { setSet((prevSet) => updater(new Set(prevSet))); }; const add = (key) => { if (set.has(key)) { return; } updateSet((newSet) => { newSet.add(key); return newSet; }); }; const remove = (key) => { if (!set.has(key)) { return; } updateSet((newSet) => { newSet.delete(key); return newSet; }); }; const reset = () => setSet(getInitValue()); return [ set, { add: useMemoizedFn(add), remove: useMemoizedFn(remove), reset: useMemoizedFn(reset), }, ]; } export default useSet;