32 lines
784 B
TypeScript
32 lines
784 B
TypeScript
import React from "react";
|
|
|
|
export type UseLocalStorageParam<
|
|
T extends { [key: string]: any } = { [key: string]: any }
|
|
> = {
|
|
key: keyof T;
|
|
};
|
|
|
|
/**
|
|
* # Use Local Storage
|
|
*/
|
|
export default function useLocalStorage<
|
|
T extends Record<string, any> | undefined = undefined
|
|
>(param?: UseLocalStorageParam) {
|
|
const [data, setData] =
|
|
React.useState<T extends undefined ? string | null : T>();
|
|
|
|
React.useEffect(() => {
|
|
if (param?.key) {
|
|
const value = localStorage.getItem(param.key as string);
|
|
try {
|
|
const jsonValue = JSON.parse(value || "");
|
|
setData(jsonValue as any);
|
|
} catch (error) {
|
|
setData(value as any);
|
|
}
|
|
}
|
|
}, []);
|
|
|
|
return { data };
|
|
}
|