我正在研究一个React项目,并使用Redux进行状态管理。我正在从ImmutableJS迁移到Immer,但不确定如何通过一些更改返回初始状态。我使用的是ImmutableJS的合并,但不确定如何使用Immer。
我四处张望,找不到答案。似乎将拔模设置为初始状态,然后进行一些更改是无效的。
export const initialState = {
initializedAuth: false,
isAuthenticated: false,
user: null,
};
const authProviderReducer = (state = initialState, action) =>
produce(state, draft => {
switch (action.type) {
case AUTH_USER_NO_TOKEN:
draft.initializedAuth = true;
draft.isAuthenticated = false;
break;
case AUTH_UPDATE_USER_HAVE_TOKEN:
draft.initializedAuth = true;
draft.isAuthenticated = true;
break;
case AUTH_SUCCESSFUL_LOGIN:
draft.initializedAuth = true;
draft.isAuthenticated = true;
draft.user = action.payload;
delete draft.user.session;
break;
case AUTH_LOGOUT: {
// return initialState;
// draft = initialState; doesn't work
}
}
});
在AUTH_LOGOUT
上,我想返回初始状态并将其initializedAuth
属性设置为true。
使用Immutablejs,我能够做到这一点:
case AUTH_LOGOUT: {
return initialState.set('initializedAuth', true);
}
答案 0 :(得分:0)
您似乎遵循了正确的模式,只是减速器的AUTH_LOGOUT
情况应如下所示:
case AUTH_LOGOUT: {
return draft[initializedAuth] = true;
}
关于返回intialState,文档中包含以下部分:
如果要使用此方法初始化未初始化状态 构造,您可以通过将初始状态作为第二个传递 产生参数:
const byId = produce(
(draft, action) => {
switch (action.type) {
.
.
.
}
},
intialState <-- here
)
答案 1 :(得分:0)
将draft
重置为initialState
并设置initializedAuth
。
case AUTH_LOGOUT: {
draft = initialState; // reset to initialState
draft.initializedAuth = true; // set to true
break;
}
答案 2 :(得分:0)
const appReducer = (state = initialState, action) =>
produce(state, draft => {
switch (action.type) {
case LOGOUT:
return initialState;