Я использую 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 для моего сервера, проверить временную метку и сравнить с локальным хранилищем с корневым ключом, а если удаленные данные отсутствуют или устарели, то загрузить локальное хранилище в удаленное. сервер ИЛИ, если локальное хранилище устарело или отсутствует, загрузите и перезапишите локальное хранилище.
Два очень похожих вопроса
Для этого простого варианта использования есть более простое / лучшее решение?
Как получить доступ к локальному хранилищу, сохраненному с помощью redux-persist / lib / storage?