Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用Immer从减速器返回初始状态?_Javascript_Redux_Immer.js - Fatal编程技术网

Javascript 如何使用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

我正在做一个React项目,并使用Redux进行状态管理。我正在从ImmutableJS迁移到Immer,我不知道如何通过一些更改返回初始状态。我在使用ImmutableJS中的merge,但不知道如何使用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);
}

看起来您遵循的模式是正确的,只是您的reducer的
AUTH_LOGOUT
案例应如下所示:

case AUTH_LOGOUT: {
    return draft[initializedAuth] = true;
}
关于返回初始状态,文档中有以下部分:

如果要使用以下命令初始化未初始化的状态 构造时,可以通过将初始状态传递为second来实现 要生成的参数:

const byId=product(
(草案、行动)=>{
开关(动作类型){
.
.
.
}
},
初始状态
const byId = produce(
    (draft, action) => {
        switch (action.type) {
            .
            .
            .
        }
    },
    intialState <-- here
)