Я хочу установить условие для полного сохранения / регидратации магазина или отсутствия в зависимости от того, восстанавливается ли приложение после ошибки.
В компоненте верхнего уровня (app.js) я импортирую хранилище и персистор (из MyStore.js), а остальную часть приложения помещаю в Provider и PersistGate. Хранилище находится в отдельном файле, поэтому его можно импортировать и читать с помощью некоторых общих файлов логики.
Когда компонент приложения загружается, он проверяет AsyncStorage, чтобы увидеть, восстанавливается ли он после ошибки, и обновляет состояние. Я хочу, чтобы это состояние определяло, сохраняется ли хранилище.
Буду любить любые предложения
// ......... App.js:
componentDidMount = () => { this.checkForPreviousFatalError() }
checkForPreviousFatalError = async () => {
var array = null
try {
array = await AsyncStorage.multiGet(['@lastFatalErrorEpoch', '@previousFatalErrorEpoch'])
} catch(e) {
console.log( "Unable to retrieve date of last 2 errors: " + e );
}
const lastError = array[0][1];
const prevError = array[1][1];
if ( lastError && prevError && parseInt(prevError) + 60000 > parseInt(lastError) ) {
// do not persist store
} else {
// persist store
};
}
render() {
const waitingElement = (
<ImageBackground source={require('./assets/signInBackground.jpg')} style={[ Styles.flexCenter, Styles.flexColumn, { height: "100%" }]}>
<Text style={{ fontSize: 18, marginBottom: 20 }} >{ EnglishNA.RestoringLocalData }</Text>
<Spinner size='large' flexZero={ true } color="white" />
</ImageBackground>
)
return (
<Provider store={ store }>
<PersistGate loading={ waitingElement } persistor={ persistor }>
<LogIn />
</PersistGate>
</Provider>
)
}
}
// ....... MyStore.js
import ReduxThunk from 'redux-thunk';
import { createStore, applyMiddleware } from 'redux';
import ServerCall from './services/ServerCall';
import rootReducer from './reducers';
import { persistStore, persistReducer } from 'redux-persist';
import storage from 'redux-persist/lib/storage';
import autoMergeLevel2 from 'redux-persist/lib/stateReconciler/autoMergeLevel2';
const persistConfig = {
key: 'root',
storage: storage,
stateReconciler: autoMergeLevel2 // see "Merge Process" section for details.
};
const pReducer = persistReducer(persistConfig, rootReducer);
export const store = createStore( pReducer, applyMiddleware( ReduxThunk, ServerCall ) );
export const persistor = persistStore(store);