Pull to refresh

Comments 8

setLocalStorageItem

Зачем возвращать всегда null из метода?

Если isNil вернёт true, а isUndefined- false, то дважды вызовется запись в localStorage.

У кода вложенность уменьшить бы, я б инвертнул условия.

Как предлагаете использовать ваше решение, копипастить? Если, вдруг, кто то захочет.

Ну и напоследок,

В рамках своей работы, я не раз сталкивался с проблемой, что нужно отслеживать изменение в LocalStorage в совершенно независимых компонентах

Мне кажется, что то делаете не так. LocalStorage не для этого, шарьте данные сервисами или чем там принято в каждом конкретном фреймворке. А storage уже юзайте для коммуникации между вкладками

Массив который содержит ключи в localStorage, при изменении значений которых будет вызываться функция обработчик

Долго втыкал в код, если передать пустой массив - то это подписка на изменение любых ключей будет?

Какие проблемы решает хук useLocalStorageEffect

У вас в этом блоке ни одной проблемы не указано.

Отслеживание изменений происходит в любом месте вашего приложения

Проблема то в чем?

Вам не обязательно волноваться о перезагрузке вашей страницы, для того что бы информация обновилась

В чем проблема?

Код выглядит лаконично и понятно

В чем проблема то?

Все три пункта высосаны из пальца

Обратите внимание, это код мидл-фронта, который хочет 200к. Не джуна.

Я в целом не понимаю столь большую любовь к LocalStorage.

Это безусловно нужная вещь, но лишь в определенных местах. В большинстве случаев можно обойтись возможностями фреймворка (включая хранилище) и EventBus-ом.

Не припомню на своем опыте, чтобы приходилось изобретать велосипед для LocalStorage. Причем даже в больших проектах. Всегда хватало стандартного JS API.

Учитывая декларативный подход реакта, логичнее было бы иметь хук useLocalStorageData, который возвращает значение указанного ключа, и вызывает рендер, когда оно изменилось.

P.S. Без lodash здесь можно вполне обойтись. Он только усложняет понимание материала.

В рамках своей работы, я не раз сталкивался с проблемой, что нужно отслеживать изменение в LocalStorage в совершенно независимых компонентах.

Где-то что-то не так с логикой, причинами и следствиями.

- Из LocalStorage достаточно только прочитать один раз во время инициализации стартового состояния.

- При обновлении состояния - как сайд-эффект обновлять и LocalStorage (если это действительно надо).

- Источником истины для обновления компонентов должно быть состояние, а не LocalStorage.

Если неудобно шарить состояние между компонентами - mobx в помощь))

Мне кажется, статья про реализацию конкретного механизма, а не про то, какой способ хранения состояния лучше.

Но раз зашла речь про сравнение способов, то вот мои 3 копейки. Я согласен, что в большинстве случает лучше делать синхронизацию через JS-память. Но есть ситуации, когда это костыльно или невозможно. Например, HTML-виджеты, которые вставляются на сторонние сайты, особенно если они iframe. Конечно, в JS есть механизмы, предназначенные именно для синхронизации между вкладками и фреймами. Но раз localStorage предоставляет одновременно синхронизацию и сохранение данных минимумом кода, а объём данных не большой, то почему бы нет?

в реакт 18 появился useSyncExternalStore - хук для работы с внешними хранилищами. Без него будут проблема с SSR

Хорошо, а какой кейс применения? Почему не просто через воркер, как все нормальные люди? Чем данная реализация лучше?

Sign up to leave a comment.

Articles