ahooks
Version:
react hooks library
38 lines (37 loc) • 955 B
JavaScript
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;