Регулярное резервное копирование - PullRequest
1 голос
/ 13 октября 2019

Я использую redux-persist в приложении RN, управляемом Expo, и использую localStorage

import storage from 'redux-persist/lib/storage'

В соответствии с приведенной ниже конфигурацией, это сохраняет состояние в локальном хранилище с корневым ключом.

const persistConfig = {
  key: 'root',
  storage,
}

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

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

Примечание. Я не хочу, чтобы хранилище в реальном времени, например, Firebase или Realm. Все данные используются с локального устройства, но только периодически сохраняются на удаленном устройстве. Хорошо, если резервные данные немного отстают от локальной копии. (Думайте об этом как о резервном копировании WhatsApp на Google Диске, которое является периодическим, периодическим)

Я думаю об использовании компонента Expo AppLoading для извлечения и сохранения этого локального хранилища, например, в App.js

render() {
    if (!this.state.isLoadingComplete) {
      return (
        <AppLoading
          startAsync={this._syncFromRemoteAsync}
          onError={this._handleLoadingError}
          onFinish={this._handleFinishLoading}
        />
      );
    } else {
      return (
        <Provider store={store}>
          <PersistGate loading={null} persistor={persistor}>
          <View style={styles.container}>
            <AppNavigator />
          </View>
          </PersistGate>
        </Provider>
      );
    }
  }

Теперь в функции _syncFromRemoteAsync я планирую сделать вызов API для моего сервера, проверить временную метку и сравнить с локальным хранилищем с корневым ключом, а если удаленные данные отсутствуют или устарели, то загрузить локальное хранилище в удаленное. сервер ИЛИ, если локальное хранилище устарело или отсутствует, загрузите и перезапишите локальное хранилище.

Два очень похожих вопроса

  1. Для этого простого варианта использования есть более простое / лучшее решение?

  2. Как получить доступ к локальному хранилищу, сохраненному с помощью redux-persist / lib / storage?

...