I've setup redux-persist with react-toolkit as suggested in the documentation. Now I need to do some operation on rehydrate ow do I do that? This is what I've tried but not working.
...
import { REHYDRATE } from 'redux-persist'
...
const accessControl = createSlice({
name: 'accessControl',
initialState,
reducers: {
loginStart(state: AccessControlState) {
state.isLoading = true
},
loginSucces(state: AccessControlState, action: PayloadAction<LoginResponsePayload>) {
state.isAuthenticated = true
state.token = action.payload.access_token
state.isLoading = false
state.error = null
},
loginFailed(state: AccessControlState, action: PayloadAction<string>) {
state.isAuthenticated = false
state.token = ''
state.isLoading = false
state.error = action.payload
},
logout(state: AccessControlState) {
state.isAuthenticated = false
state.token = ''
state.isLoading = false
state.error = null
},
[REHYDRATE]: (state: AccessControlState) => {
console.log('in rehydrate')
}
}
})
createSlice
uses the keys of thereducers
object to generate action type constants prefixed by the slice name. In your case, these are strings likeaccessControl/loginStart
andaccessControl/loginFailed
.Your rehydrate reducer isn't called because its action type constant expands to
accessControl/persist/REHYDRATE
, but redux-persist dispatches an action with typepersist/REHYDRATE
.To handle rehydration, you should instead write your reducer in the
extraReducers
object. These reducers handle external actions and don't generate actions in the slice'sactions
property.Example: