Комментарии 5
Для "тщательно разработанных" выглядит странно. Отдельный remove выглядит избыточным, выставление undefined ведь делает то же самое.
Не понимаю почему в хранилище нельзя писать сразу синхронно, просто вернув обёртку над сеттером из стейта и сразу же ловить ошибку, зачем эффект?
Эффект нужен для другого - так как хранилище общее, а компонентов которым оно нужно может быть несколько, то нужно как-то узнавать об изменениях. Про это вообще думали?
Не хватает учёта нескольких вкладок бразуера.
Как будто слишком специфичный хук, чтобы использовать именно для session storage и local storage и ни для чего другого.
А что, если я хочу на сервере иметь какое-то хранилище и синькать его?
Тут как будто бы напрашивается более абстрактный интерфейс для хранилища + работа с асинхронщиной. А сериализацию/десериализацию поместить в другое место и к примеру использовать только в local storage и session storage.
Второй момент: что если я захочу использовать хук в 2 независимых компонентах, и при этом у меня будет один ключ? Тут мы потеряем реактивность, если обновим в одном компоненте. А это, как по мне, очень важная штука.
Вообще всё уже придумано по сути: useSyncExternalStore. А на него уже можно какие угодно абстракции накручивать.
React Custom Hook: useStorage