參考 http://www.coderlord.com/javascript/5/6/7/6540DE35624567.html
關(guān)鍵代碼
我想指出Dan Abramov接受的評論是正確的,除非我們在使用react-router-redux軟件包以及這種方法
時(shí)遇到了一個(gè)奇怪的問題。我們的修復(fù)方法是不將狀態(tài)設(shè)置為undefined但是而是仍然使用當(dāng)前的路由
減少器魏蔗。所以如果你使用這個(gè)包持偏,我建議你實(shí)施下面的解決方案
const rootReducer = (state, action) => {
if (action.type === 'USER_LOGOUT') {
const { routing } = state
state = { routing }
}
return appReducer(state, action)
}
應(yīng)用場景:
用戶退出登錄驼卖,情況相關(guān)緩存數(shù)據(jù)。
問題:
我使用Redux進(jìn)行狀態(tài)管理鸿秆。
如何將存儲重置為其初始狀態(tài)酌畜?
例如,假設(shè)我有兩個(gè)用戶帳戶(u1和u2)卿叽。
想象以下事件序列:
用戶u1登錄到應(yīng)用程序并執(zhí)行某些操作桥胞,因此我們在存儲中緩存一些數(shù)據(jù)。
用戶u1注銷考婴。
用戶u2登錄到應(yīng)用程序贩虾,而不刷新瀏覽器。
在這一點(diǎn)上沥阱,緩存的數(shù)據(jù)將與u1關(guān)聯(lián)缎罢,我想清理它。
當(dāng)?shù)谝粋€(gè)用戶注銷時(shí),如何將Redux存儲重置為其初始狀態(tài)策精?
最佳答案:
一種方法是用手寫一個(gè)根reducer舰始。
根reducer通常委托處理由combineReducers()生成的reducer的動(dòng)作。但是咽袜,每當(dāng)它接收到USER_LOGOUT操作時(shí)丸卷,它就會重新返回初始狀態(tài)。
例如询刹,如果你的root reducer看起來像這樣:
const rootReducer = combineReducers({
/* your app’s top-level reducers */
})
你可以將它重命名為appReducer并寫一個(gè)新的rootReducer委托給它:
const appReducer = combineReducers({
/* your app’s top-level reducers */
})
const rootReducer = (state, action) => {
return appReducer(state, action)
}
現(xiàn)在我們只需要教新的rootReducer在USER_LOGOUT操作后返回初始狀態(tài)及老。正如我們知道的,reducers應(yīng)該返回初始狀態(tài)范抓,當(dāng)它們以undefined作為第一個(gè)參數(shù)被調(diào)用時(shí)骄恶,不管操作。讓我們使用這個(gè)事實(shí)有條件地剝離累積狀態(tài)匕垫,我們將它傳遞給appReducer:
const rootReducer = (state, action) => {
if (action.type === 'USER_LOGOUT') {
state = undefined
}
return appReducer(state, action)
}
現(xiàn)在僧鲁,每當(dāng)USER_LOGOUT觸發(fā)時(shí),所有reducers都將重新初始化象泵。他們也可以返回不同于他們最初想要的東西寞秃,因?yàn)樗麄兛梢詸z查action.type以及。
重申偶惠,全新的代碼如下所示:
const appReducer = combineReducers({
/* your app’s top-level reducers */
})
const rootReducer = (state, action) => {
if (action.type === 'USER_LOGOUT') {
state = undefined
}
return appReducer(state, action)
}
注意春寿,我不是在這里改變狀態(tài),我只是reassigning the reference的一個(gè)局部變量忽孽,稱為狀態(tài)绑改,然后傳遞給另一個(gè)函數(shù)。改變狀態(tài)對象將違反Redux原則兄一。
翻譯自:https://stackoverflow.com/questions/35622588/how-to-reset-the-state-of-a-redux-store
轉(zhuǎn)載注明原文:javascript – 如何重置Redux存儲的狀態(tài)厘线?