我正在制作一个健身应用并遇到一个我认为难以修复的问题,但我一直被卡住了。
当用户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)));
};
答案 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的更多信息。