Обновление localStorage, когда появляются новые данные с сервера? - PullRequest
0 голосов
/ 31 октября 2019

После входа в приложение (React.js) я кэширую данные member в localStorage, так как многие мои компоненты используют их, и в идеале запрос должен выполняться только при входе в систему.

Однако некоторые свойства этого объекта member могут быть изменены в бэкэнде вручную, поэтому у внешнего интерфейса нет способа узнать, изменился ли вообще объект member. (Опять же, в идеале, любое изменение в объекте member должно проходить через некоторую отправку формы, которая напрямую изменяет БД, с которой может запускаться обновление для localStorage, но это не вариант в настоящее время.)

Пример сценария: в приложении есть общая форма для запроса дополнительных кредитов. Служба поддержки получит электронное письмо с запросом. Кредиты будут обновляться вручную для клиента А (в БД). Если Клиент A не будет повторно входить в систему (где выполняется запрос на получение member), localStorage все равно покажет старое no. кредитов.

Если это ситуация, как лучше это сделать?

  1. Не храните данные member в localStorage, чтобычтобы сохранить данные свежими. Просто вызывайте конечную точку всякий раз, когда это необходимо.

  2. Использовать sessionStorage вместо?

  3. Запускать обновление, когда пользователь обновляет страницу / приложение (хотя пользователь может не знать, что ему нужно сделать это для обновления данных).

Предложения?

Ответы [ 3 ]

1 голос
/ 31 октября 2019
  1. Вызов конечной точки всякий раз, когда это необходимо, является идеальным, если данные будут меняться в зависимости от того, что находится вне контроля пользователя.
  2. Хранилище сеансов - это просто локальное хранилище, которое стирается по окончании сеанса просмотра. у вас все равно будет та же проблема
  3. Это на самом деле не решает проблему, и, как правило, это плохой пользовательский опыт, требующий от пользователя выполнения регулярных задач по обслуживанию для наилучшего использования вашего приложения. его способности

Я бы просто получил свежие данные.

0 голосов
/ 31 октября 2019

Если вы не знаете, когда member был обновлен, не сохраняйте его. Вы должны запрашивать сервер каждый раз, когда вам нужно member. Это единственный способ синхронизировать данные с вашей базой данных.

0 голосов
/ 31 октября 2019

На высоком уровне у вас есть два варианта:

  • Опрос (периодически вызывайте серверную часть для обновления данных)
  • Открытие постоянного соединения (например, веб-сокета)на сервер, и у сервера push обновления для клиентов.

Последний вариант потребует большого количества изменений, и он изменяет масштабируемость вашего приложения, поэтому первый вариантвыбор кажется наиболее разумным для вас.

Разумно продолжать использовать localStorage, поэтому у вас есть автономная копия данных и вы не блокируете рендеринг во время загрузки страницы;у вас может быть фоновый периодический процесс обновления, который тем временем не нарушает работу пользователя. Если ваши данные отражаются в чем-то вроде редукции или контекста, то ваш пользовательский интерфейс может обновляться, если / когда данные изменятся.

...