これを行う 1 つの方法は、アプリケーションにルート レデューサーを記述することです。
ルート レデューサーは通常、アクションの処理を によって生成されたレデューサーに委任しcombineReducers()
ます。ただし、アクションを受けるたびにUSER_LOGOUT
、最初の状態に戻ります。
たとえば、ルート レデューサーが次のようになっているとします。
const rootReducer = combineReducers({
/* your app’s top-level reducers */
})
名前を変更してappReducer
、新しいrootReducer
委任を書き込むことができます。
const appReducer = combineReducers({
/* your app’s top-level reducers */
})
const rootReducer = (state, action) => {
return appReducer(state, action)
}
次に、アクションrootReducer
に応答して初期状態に戻るように new を教える必要があります。ご存じのように、レデューサーは、アクションに関係なく、最初の引数としてUSER_LOGOUT
呼び出されたときに初期状態を返すことになっています。この事実を使用して、 に渡すときにundefined
蓄積されたものを条件付きで取り除きましょう。state
appReducer
const rootReducer = (state, action) => {
if (action.type === 'USER_LOGOUT') {
return appReducer(undefined, action)
}
return appReducer(state, action)
}
これで、 が起動するたびUSER_LOGOUT
に、すべてのレデューサーが新たに初期化されます。また、チェックできるため、必要に応じて最初とは異なるものを返すこともできaction.type
ます。
繰り返しますが、完全な新しいコードは次のようになります。
const appReducer = combineReducers({
/* your app’s top-level reducers */
})
const rootReducer = (state, action) => {
if (action.type === 'USER_LOGOUT') {
return appReducer(undefined, action)
}
return appReducer(state, action)
}
redux-persistを使用している場合は、ストレージをクリーンアップする必要がある場合もあります。Redux-persist は状態のコピーをストレージ エンジンに保持し、状態のコピーは更新時にそこから読み込まれます。
最初に、適切なストレージ エンジンundefined
をインポートしてから、各ストレージ状態キーを設定して消去する前に状態を解析する必要があります。
const rootReducer = (state, action) => {
if (action.type === SIGNOUT_REQUEST) {
// for all keys defined in your persistConfig(s)
storage.removeItem('persist:root')
// storage.removeItem('persist:otherKey')
return appReducer(undefined, action);
}
return appReducer(state, action);
};