gpt4 book ai didi

javascript - 如何使用 Immer 从 reducer 返回初始状态?

转载 作者:行者123 更新时间:2023-12-04 13:19:09 25 4
gpt4 key购买 nike

我正在开发一个 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属性为真。

使用 Immutablejs,我可以这样做:
case AUTH_LOGOUT: {
return initialState.set('initializedAuth', true);
}

最佳答案

看起来您正在遵循正确的模式,除了您的 reducer 的 AUTH_LOGOUT案例应该如下工作:

case AUTH_LOGOUT: {
return draft[initializedAuth] = true;
}

关于返回初始状态,文档中有此部分:

If you want to initialize an uninitialized state using this construction, you can do so by passing the initial state as second argument to produce:


const byId = produce(
(draft, action) => {
switch (action.type) {
.
.
.
}
},
intialState <-- here
)

关于javascript - 如何使用 Immer 从 reducer 返回初始状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56148305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com