Как сбросить значение состояния в магазине Redux? - PullRequest
0 голосов
/ 12 сентября 2018

Я использую redux-persist , чтобы сохранить свое состояние в локальном сторге. Мне нужно после 5-минутного финиша выйти из системы и переместить пользователя на страницу входа, но я не могу удалить persist значение из локального storge, каждый раз, когда я пытаюсь удалить значение с помощью storage.removeItem redux-persist возвращает значение обратно.

RootReducer:

import storage from 'redux-persist/lib/storage';
    const appReducer  =  combineReducers({
      auth: authReducer,
      //....
    });
    const rootReducer = (state, action) => {
      if (action.type === SIGNOUT_REQUEST) {
        Object.keys(state).forEach(key => {
          storage.removeItem(`persist:${key}`);
      });
        state = undefined;
    }
    return appReducer(state, action);
    }
    export default rootReducer; 

Выход из системы:

export const logoutUser = () => dispatch => {
  dispatch({
    type: SIGNOUT_REQUEST
  })

APP.js

if (isTimeout) {
    store.dispatch(logoutUser());
  }

index.js

ReactDom.render(
  <Provider store={store}>
    <PersistGate loading={null} persistor={persistor}>
      <App />
    </PersistGate>
  </Provider>
  , document.querySelector('#root')
);

1 Ответ

0 голосов
/ 12 сентября 2018

После отправки вы можете вызвать persistor.flush(), чтобы сообщить редуктору о необходимости немедленного сохранения последнего состояния в случае необходимости.

import { persistor } from 'store'; // or w/e
// ...
export const logoutUser = () => dispatch => {
  dispatch({
      type: SIGNOUT_REQUEST
  });
  persistor.flush();
}

От разработчика :

flush предназначен для принудительной записи всех ожидающих состояний как можно скорее и предоставления обещания дождаться разрешения записи. Это может быть полезно, например, если вам нужно убедиться, что последнее состояние записано перед тем, как уйти.

...