用户注销时重置redux存储/状态

时间:2017-08-25 03:29:56

标签: reactjs redux

我正在制作一个健身应用并遇到一个我认为难以修复的问题,但我一直被卡住了。

当用户1注销并且用户2登录时,用户2将具有用户1s锻炼日志,直到他们刷新页面。这是因为退出时状态不清除锻炼日志。

我试图在我的sessionsReducer中解决这个问题,但没有成功。

我对if条件的想法是,如果currentUser为null,则传回一个空状态。 Null通过我的注销thunk动作传回。

我不确定我可以做出哪些其他动作创建者来帮助解决这个问题。

我的减速机和注销在下面。

import merge from 'lodash/merge';

import { RECEIVE_CURRENT_USER, RECEIVE_ERRORS } from '../actions/session_actions'

const nullUser = Object.freeze({
  currentUser: null,
  errors: []
});


const sessionReducer = (state = nullUser, action) => {
  Object.freeze(state);
  let newState;

  switch(action.type) {
    case RECEIVE_CURRENT_USER:
      if (action.currentUser === null) {
        newState = merge({}, {});
     } else {
       newState = merge({}, state);
     }
      const currentUser = action.currentUser;
      return merge({}, newState, {
        currentUser
      });
   case RECEIVE_ERRORS:
     const errors = action.errors;
     return merge({}, nullUser, {
        errors
     });
   default:
     return state;
  }
}

 export default sessionReducer;

Thunk action creator。

export const logout = () => (dispatch) => {
  return APIUtil.logout().then(() => dispatch(receiveCurrentUser(null)),
    err => dispatch(receiveErrors(err.responseJSON)));
};

1 个答案:

答案 0 :(得分:2)

要在退出后清除商店,我通常会这样做:

const createReducer = () => {
  const reducer = combineReducers({
    app: appReducer,
    // rest of your reducers
  });
  return (state, action) => {
    if (action.type === 'SIGN_OUT') {
      state = undefined;
    }
    return reducer(state, action);
  };
};

您可以阅读有关清理商店问题here的更多信息。