Skip to content

Commit

Permalink
feat(use-storage): expose set storage
Browse files Browse the repository at this point in the history
  • Loading branch information
SukkaW committed Dec 6, 2023
1 parent fc80b21 commit 6e96f35
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 5 deletions.
22 changes: 21 additions & 1 deletion src/create-storage-hook/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,22 @@ export function createStorage(type: StorageType) {
}
};

return function useStorage<T>(
const useSetStorage = <T>(key: string, serializer: Serializer<T>) => useCallback(
(v: T | null) => {
try {
if (v === null) {
removeStorageItem(key);
} else {
setStorageItem(key, serializer(v));
}
} catch (e) {
console.warn(e);
}
},
[key, serializer]
);

function useStorage<T>(
key: string,
serverValue?: NotUndefined<T> | undefined,
options: UseStorageRawOption | UseStorageParserOption<T> = {
Expand Down Expand Up @@ -167,5 +182,10 @@ export function createStorage(type: StorageType) {
}, [deserializer, key, serializer, serverValue]);

return [deserialized ?? serverValue ?? null, setState] as const;
}

return {
useStorage,
useSetStorage
};
}
4 changes: 2 additions & 2 deletions src/use-local-storage/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export type {
UseStorageParserOption as UseLocalStorageParserOption
} from '../create-storage-hook';

const useLocalStorage = createStorage('localStorage');
const { useStorage: useLocalStorage, useSetStorage: useSetLocalStorage } = createStorage('localStorage');

/** @see https://foxact.skk.moe/use-local-storage */
export { useLocalStorage };
export { useLocalStorage, useSetLocalStorage };
4 changes: 2 additions & 2 deletions src/use-session-storage/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ export type {
UseStorageParserOption as UseSessionStorageParserOption
} from '../create-storage-hook';

const useSessionStorage = createStorage('sessionStorage');
const { useStorage: useSessionStorage, useSetStorage: useSetSessionStorage } = createStorage('sessionStorage');

/** @see https://foxact.skk.moe/use-session-storage */
export { useSessionStorage };
export { useSessionStorage, useSetSessionStorage };

0 comments on commit 6e96f35

Please sign in to comment.