Использование localStorage в веб-разработке — действительно мощный инструмент. Информация о теме или даже данные о продукте могут быть легко сохранены в хранилище браузера пользователя; в этой статье я расскажу, как использую его в приложениях React.

Функции объекта localStorage довольно просты в использовании. Доступ к данным можно получить с помощью key: string или установить с помощью key: string и value: string
🧑💻 USING localStorage IN REACT IS SIMPLE
type Theme = 'dark' | 'light'
const [theme, setTheme] = useState<Theme>(localStorage.getItem('theme') as Theme || 'light')
useEffect(() => {
localStorage.setItem('theme', theme)
}, [theme])
Даже объекты или массивы могут быть сохранены как значение с помощью JSON.stringify()
👏 OBJECTS AND ARRAYS SHOULD BE STORED WHEN DATA IS COMPLEX
useEffect(() => {
const colors = ['#02D4F6', '#02D4B8', '🐴']
const theme = {
preferred: 'light',
actual: 'dark',
horse: '🐴'
}
localStorage.setItem('list', JSON.stringify(colors))
localStorage.setItem('list', JSON.stringify(theme))
}, [])
Поскольку мы можем сохранять только данные типа string, объекты и массивы всегда должны быть JSON.stringify()ed в setItem() и JSON.parse()d в getItem(). Со временем это может стать излишним, поэтому давайте создадим утилиту, которая сделает эту работу за нас.
👔 CREATE storage.ts IN src/utils
const storage = {
get: (key: string): string | null => {
const result = localStorage.getItem(key)
if (!result) return null
try {
return JSON.parse(result)
} catch {
return result
}
}
}
export default storage
Наш собственный объект storage был создан с использованием свойства функции get. В его обязанности входит получение элемента из localStorage с использованием параметра key и попытка проанализировать результат. Если результатом является string, он вернет его без разбора. Если значение является объектом или массивом, он может проанализировать и вернуть его.
Теперь мы можем расширить нашу утилиту с помощью set
📈 EXTEND UTILITY WITH set()
const storage = {
get: (key: string): string | null => {
const result = localStorage.getItem(key)
if (!result) return null
try {
return JSON.parse(result)
} catch {
return result
}
},
set: (key: string, value: string | {} | []): void => {
localStorage.setItem(
key,
typeof value === 'string' ? value : JSON.stringify(value)
)
}
}
export default storage
В дополнение к key, set также имеет параметр value, который может быть строкой, объектом или массивом. Задача этой функции состоит в том, чтобы сохранить value под key в localStorage, и перед сохранением она должна JSON.stringify() value, если ее тип не string.
Конечно, следуя этому шаблону, вы можете расширить функциональность этой утилиты дополнительными localStorage функциями, такими как clear()
🚀 ADD MORE FIELDS
const storage = {
get: (key: string): string | null => {
const result = localStorage.getItem(key)
if (!result) return null
try {
return JSON.parse(result)
} catch {
return result
}
},
set: (key: string, value: string | {} | []): void => {
localStorage.setItem(
key,
typeof value === 'string' ? value : JSON.stringify(value)
)
},
clear: (): void => {
localStorage.clear()
}
}
export default storage
Использование теперь очень простое; объект хранилища должен быть только импортирован на страницу или компонент и выполнен с соответствующими аргументами.
Как вы относитесь к этой реализации? Имеет ли это смысл для вас? Это облегчит вашу жизнь? Пожалуйста, поделитесь своими мыслями в разделе комментариев.
👋 Надеюсь, вы нашли это полезным в поисках нового материала для изучения. Спасибо, что нашли время, чтобы прочитать это! Подпишитесь на мою рассылку, если вы хотите читать больше таких историй в будущем!