Javascript 如何使用Immer从减速器返回初始状态?
我正在做一个React项目,并使用Redux进行状态管理。我正在从ImmutableJS迁移到Immer,我不知道如何通过一些更改返回初始状态。我在使用ImmutableJS中的merge,但不知道如何使用Immer 我到处找,找不到答案。似乎将草稿设置为初始状态,然后进行一些更改是不起作用的Javascript 如何使用Immer从减速器返回初始状态?,javascript,redux,immer.js,Javascript,Redux,Immer.js,我正在做一个React项目,并使用Redux进行状态管理。我正在从ImmutableJS迁移到Immer,我不知道如何通过一些更改返回初始状态。我在使用ImmutableJS中的merge,但不知道如何使用Immer 我到处找,找不到答案。似乎将草稿设置为初始状态,然后进行一些更改是不起作用的 export const initialState = { initializedAuth: false, isAuthenticated: false, user: null, }; co
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);
}
看起来您遵循的模式是正确的,只是您的reducer的
AUTH_LOGOUT
案例应如下所示:
case AUTH_LOGOUT: {
return draft[initializedAuth] = true;
}
关于返回初始状态,文档中有以下部分:
如果要使用以下命令初始化未初始化的状态
构造时,可以通过将初始状态传递为second来实现
要生成的参数:
const byId=product(
(草案、行动)=>{
开关(动作类型){
.
.
.
}
},
初始状态
const byId = produce(
(draft, action) => {
switch (action.type) {
.
.
.
}
},
intialState <-- here
)