| | import { atom } from 'recoil'; |
| |
|
| | |
| | export function atomWithLocalStorage<T>(key: string, defaultValue: T) { |
| | return atom<T>({ |
| | key, |
| | default: defaultValue, |
| | effects_UNSTABLE: [ |
| | ({ setSelf, onSet }) => { |
| | const savedValue = localStorage.getItem(key); |
| | if (savedValue !== null) { |
| | try { |
| | const parsedValue = JSON.parse(savedValue); |
| | setSelf(parsedValue); |
| | } catch (e) { |
| | console.error( |
| | `Error parsing localStorage key "${key}", \`savedValue\`: defaultValue, error:`, |
| | e, |
| | ); |
| | localStorage.setItem(key, JSON.stringify(defaultValue)); |
| | setSelf(defaultValue); |
| | } |
| | } |
| |
|
| | onSet((newValue: T) => { |
| | localStorage.setItem(key, JSON.stringify(newValue)); |
| | }); |
| | }, |
| | ], |
| | }); |
| | } |
| |
|