React useSet钩子
创建一个有状态的Set
对象,并提供一组操作函数来操作它。
- 使用
useState()
钩子和Set
构造函数从initialValue
创建一个新的Set
。 - 使用
useMemo()
钩子创建一组非变异操作,这些操作可以操作set
状态变量,每次使用状态设置器创建一个新的Set
。 - 返回
set
状态变量和创建的actions
。
const useSet = initialValue => {
const [set, setSet] = React.useState(new Set(initialValue));
const actions = React.useMemo(
() => ({
add: item => setSet(prevSet => new Set([...prevSet, item])),
remove: item =>
setSet(prevSet => new Set([...prevSet].filter(i => i !== item))),
clear: () => setSet(new Set()),
}),
[setSet]
);
return [set, actions];
};
const MyApp = () => {
const [set, { add, remove, clear }] = useSet(new Set(['apples']));
return (
<div>
<button onClick={() => add(String(Date.now()))}>添加</button>
<button onClick={() => clear()}>重置</button>
<button onClick={() => remove('apples')} disabled={!set.has('apples')}>
移除苹果
</button>
<pre>{JSON.stringify([...set], null, 2)}</pre>
</div>
);
};
ReactDOM.createRoot(document.getElementById('root')).render(
<MyApp />
);