UNPKG

rooks

Version:

Essential React custom hooks ⚓ to super charge your components!

47 lines (46 loc) 1.72 kB
import { useCallback, useMemo, useState } from "react"; /** * useSetState * @description Manage the state of a Set in React. * @param {Set<T>} initialSetValue The initial value of the set to manage. * @returns {UseSetStateReturnValue<T>} The state of the Set and the controls. * @see {@link https://react-hooks.org/docs/useSetState} * @example * import { useSetState } from "./useSetState"; * const [set, setControls] = useSetState(new Set()); * setControls.add(1); // {1} * setControls.add(2); // {1, 2} * setControls.delete(1); // {2} * setControls.clear(); // {} * */ function useSetState(initialSetValue) { var _a = useState(new Set(initialSetValue)), setValue = _a[0], setSetValue = _a[1]; var add = useCallback(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } setSetValue(new Set(setValue.add.apply(setValue, args))); }, [setValue, setSetValue]); var deleteValue = useCallback(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var newSetValue = new Set(setValue); newSetValue.delete.apply(newSetValue, args); setSetValue(newSetValue); }, [setValue, setSetValue]); var clear = useCallback(function () { setSetValue(new Set()); }, [setSetValue]); var controls = useMemo(function () { return { add: add, delete: deleteValue, clear: clear }; }, [add, deleteValue, clear]); var returnValue = useMemo(function () { return [setValue, controls]; }, [setValue, controls]); return returnValue; } export { useSetState };