2017-08-25 69 views
0

我正在製作健身應用程序,並遇到一個我認爲不會太難解決的問題,但我一直在卡住。當用戶註銷時重置還原存儲/狀態

當用戶1註銷並且用戶2登錄時,用戶2將擁有用戶1的健身日誌,直到他們刷新頁面。這是因爲狀態在註銷時未清除鍛鍊日誌。

我試圖解決這個在我的sessionsReducer,但沒有成功。

我的想法,如果條件是如果currentUser爲空傳回空狀態。空值傳回我的註銷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

我想我正在清理錯誤的狀態片。如果這個方法有效,將會用解決方案報告。 –

+0

可能重複[如何重置Redux商店的狀態?](https://stackoverflow.com/questions/35622588/how-to-reset-the-state-of-a-redux-store) –

回答

1

要清除店註銷後我通常是這樣的:

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

+0

謝謝,我今天早上解決了這個問題,在我的減速器上添加了CLEAR_ALL功能!完美工作。 –