use-persisted-state.js 657 B

12345678910111213141516171819202122232425
  1. import { useState, useCallback } from 'react'
  2. import localStorage from '../../infrastructure/local-storage'
  3. function usePersistedState(key, defaultValue) {
  4. const [value, setValue] = useState(() => {
  5. const keyExists = localStorage.getItem(key) != null
  6. return keyExists ? localStorage.getItem(key) : defaultValue
  7. })
  8. const updateFunction = useCallback(
  9. newValue => {
  10. if (newValue === defaultValue) {
  11. localStorage.removeItem(key)
  12. } else {
  13. localStorage.setItem(key, newValue)
  14. }
  15. setValue(newValue)
  16. },
  17. [key, defaultValue]
  18. )
  19. return [value, updateFunction]
  20. }
  21. export default usePersistedState