prometheus/web/ui/react-app/src/hooks/useLocalStorage.tsx
Aleksey Smirnov 84c6f0e584
Init value for useState hook calls once (#11802)
Signed-off-by: Smirnov Aleksey <aleksey.smirnov@sbermarket.ru>

Signed-off-by: Smirnov Aleksey <aleksey.smirnov@sbermarket.ru>
Co-authored-by: Smirnov Aleksey <aleksey.smirnov@sbermarket.ru>
2023-01-03 22:09:00 +01:00

15 lines
514 B
TypeScript

import { Dispatch, SetStateAction, useEffect, useState } from 'react';
export function useLocalStorage<S>(localStorageKey: string, initialState: S): [S, Dispatch<SetStateAction<S>>] {
const [value, setValue] = useState(() =>
JSON.parse(localStorage.getItem(localStorageKey) || JSON.stringify(initialState))
);
useEffect(() => {
const serializedState = JSON.stringify(value);
localStorage.setItem(localStorageKey, serializedState);
}, [localStorageKey, value]);
return [value, setValue];
}