UNPKG

@vtex/admin-ui

Version:

> VTEX admin component library

30 lines (24 loc) 852 B
import type { Dispatch, SetStateAction } from 'react' import { useState, useEffect } from 'react' import { isBrowser } from '@vtex/admin-ui-util' /** * Use local storage to persist a state * @param defaultValue - value if the key is not found within localstorage * @param key - localstorage key * @example * const [state, setState] = usePersistentState('') */ export function usePersistentState<T>( defaultValue: T, key: string ): [T, Dispatch<SetStateAction<T>>] { const [value, setValue] = useState<T>(() => { if (!isBrowser) return defaultValue const persistedValue = window.localStorage?.getItem(key) ?? null return persistedValue !== null ? JSON.parse(persistedValue) : defaultValue }) useEffect(() => { window?.localStorage?.setItem(key, JSON.stringify(value)) }, [key, value]) return [value, setValue] }