整合开关和 Storage
前面的章节中已经实现了支持布尔量切换的 atom 创建,如果再需要将布尔量保存到 storage 中,那么就又要费一番操作。这里提供一个将两种操作结合起来的方法。这种结合方法在结合其他操作的时候也非常常用。
export function atomWithToggleAndStorage(
key: string,
initialValue?: boolean,
storage?: any
): WritableAtom<boolean, [boolean?], void> {
const anAtom = atomWithStorage(key, initialValue, storage);
const derivedAtom = atom(
(get) => get(anAtom),
(get, set, nextValue?: boolean) => {
const update = nextValue ?? !get(anAtom);
void set(anAtom, update);
}
);
return derivedAtom as WritableAtom<boolean, [boolean?], void>;
}