Приложение вылетает при обновлении из магазина приложений или магазина игр, потому что оно имеет старое локальное хранилище

Я использовал redux-persist для сохранения данных в хранилище redux. Сейчас я добавил несколько новых флагов в магазин, но когда приложение обновляется из магазина, оно не получает новые флаги, так как имеет старое локальное хранилище, а локальное хранилище не очищается при обновлении приложения. Это приводит к сбою приложения, пока я не переустанавливаю приложение после его удаления.

'use strict';

/* React Native */
import { AsyncStorage } from 'react-native';

/* Officetrax */
import { createStore, applyMiddleware } from 'redux';
import app from './reducers';

/* Thunk */
import thunk from 'redux-thunk';

/* Redux Storage */
import excludeSaveActionConstants from './constants/excludeSaveActionConstants';

/* Remote Redux Dev Tools */
import { composeWithDevTools } from 'remote-redux-devtools';

/* Redux Offline */
import { offline } from '@redux-offline/redux-offline';
import offlineConfig from '@redux-offline/redux-offline/lib/defaults';

/* Redux Logger */
import { createLogger } from 'redux-logger';

export default function configureStore() {




    // Create redux logger
    const logger = createLogger({
        //logger: remoteConsole,
        logErrors: true,
    });

    let persistOptions = { ...offlineConfig, whitelist: excludeSaveActionConstants };

    const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || composeWithDevTools;
    // Create the store with middleware applied
    let store = createStore(app, composeEnhancers(
        applyMiddleware(thunk),
        offline(persistOptions)
    ));

    return store;
}

person Shubham    schedule 12.09.2019    source источник
comment
Почему бы не очистить локальное хранилище перед запуском этого кода, если вы подозреваете, что приложение было обновлено? Возможно, в будущих выпусках вам следует сохранить последний известный номер версии и сравнить его с ним.   -  person Jesse Schokker    schedule 12.09.2019
comment
БД (например, Room) используют номера версий и миграции, чтобы позаботиться об этом. redux-persist-migrate — один из примеров.   -  person Vineet Kulkarni    schedule 12.09.2019


Ответы (1)


Если вы меняете структуру редукторов, вам следует выполнить миграцию или, как предложил Джесси Шоккер, очистить весь кеш, но если вы действительно не хотите потерять некоторые из этих данных, выполните миграцию.

import { createMigrate } from 'redux-persist';

const migrations = {
    2: state => {
      const { yourReducer } = state;
      const mynewStructure = { ...yourReducer, myNewKey: 'some value' }; 
      state.yourReducer = mynewStructure;
      return state;
      };
    }
  };

  const persistConfig = {
    ...offlineConfig, 
    whitelist: excludeSaveActionConstants
    version: 2, // Add a version which will correspond to the number declared in your migrate
    migrate: createMigrate(migrations, { debug: false })
  };
person Charlie    schedule 12.09.2019
comment
Спасибо чувак! Ты сделал мой день, Это было все равно что биться головой о стену в последний день. Это решено сейчас. - person Shubham; 13.09.2019