Reactjs 为什么redux存储只获取上次分派操作的值

Reactjs 为什么redux存储只获取上次分派操作的值,reactjs,react-redux,redux-thunk,Reactjs,React Redux,Redux Thunk,我正在尝试在redux的操作阶段执行多重分派操作: 这是我的密码: export const get_data_time_slot_week = (params) => { return async (dispatch) => { dispatch({ type: common.CALL_API_REQUEST, }); const res = await callAPI.post(TIME_SLOT_WEEK + GET, {

我正在尝试在redux的操作阶段执行多重分派操作:

这是我的密码:

export const get_data_time_slot_week = (params) => {
return async (dispatch) => {
    dispatch({
        type: common.CALL_API_REQUEST,
    });
    const res = await callAPI.post(TIME_SLOT_WEEK + GET, {
        params: { ...params },
    });

    if (res.status === 200 && res.data.code >= 0) {

//Here, I get new state of Selector timeSlotWeek
        dispatch({
            type: timeSlotWeek.GET_DATA_TIME_SLOT_WEEK_SUCCESS,
            payload: {
                data: [...res.data.data],
                dataPage: { ...res.data.dataPage },
                errCode: res.data.code,
            },
        });

//And here, I lost state of a Selector timeSlotWeek add get new state of Selector common
        dispatch({
            type: common.GET_FEEDBACK,
            payload: {
                msg: "__msg_can_not_to_server",
            },
        });
    }
};
})

为什么会这样?我如何在代码中保持timeSlotWeek的状态和相同的流

这是我使用Redux工具检查时的结果

GET_DATA_TIME_SLOT_WEEK_SUCCESS     =>    data: { 0: {...}, 1{...} }
GET_FEEDBACK                        =>    data: {}
                                          msg: "new msg"
这是我的商店

import { createStore, applyMiddleware } from "redux";
import { composeWithDevTools } from "redux-devtools-extension";
import rootReducer from "./reducers";
import thunk from "redux-thunk";
const store = createStore(rootReducer, composeWithDevTools(applyMiddleware(thunk)));

export default store;
这是我的{combineReducers}

import { combineReducers } from "redux";
import feedback from "./feedback.reducer";
import loadingReducer from "./loading.reducer";
import timeSlotWeek from "./timeSlotWeek.reducer";

const rootReducer = combineReducers({
    dataTimeSlotWeek: timeSlotWeek,
    loading: loadingReducer,
    feedback: feedback,
});

export default rootReducer;
谢谢你的帮助

更新:问题解决: 因为在timeSlotWeek.reducer的reducer中,我有一个默认情况,当我分派另一个操作时,这个情况将运行并使timeSlotWeek的状态变为initState

import { common, timeSlotWeek } from "../actions/constants";
const initState = {
    data: [],
};

    export default (state = initState, action) => {
        switch (action.type) {
            case timeSlotWeek.GET_DATA_TIME_SLOT_WEEK_SUCCESS:
                state = {
                    // Pass payload to this
                };
                break;
            default:
                state = { ...initState };
        }
        return state;
    };
我通过以下方式解决它:

import { common, timeSlotWeek } from "../actions/constants";

const initState = {
    data: [],
};

export default (state = initState, action) => {
    switch (action.type) {
        case timeSlotWeek.GET_DATA_TIME_SLOT_WEEK_SUCCESS:
            state = {
                // Pass payload to this
            };
            break;
        **case common.CALL_API_FINISH:
            state = state;
            break;
        case common.GET_FEEDBACK:
            state = state;
            break;**
        default:
            state = { ...initState };
    }
    return state;
};

有没有比我更好的方法?感谢cmt

默认的reducer case应该始终返回当前状态对象。除此之外,我想不出一个反例(尽管我看到一些教程在这里抛出了一个错误,但您通常不想这样做,因为它增加了不必要的错误处理,并使一切变得复杂)

您只需要为状态切片缩减器需要处理的操作定义案例,否则,只需返回当前状态即可让默认案例处理

const initState = {
  data: [],
};

export default (state = initState, action) => {
  switch (action.type) {
    case timeSlotWeek.GET_DATA_TIME_SLOT_WEEK_SUCCESS:
      return {
        // Pass payload to this
      };

    default:
      return state;
  }
};
如果需要重置某些状态,则使用另一个操作和案例,即:

case 'resetTimeSlotWeek':
  return initState;

“选择器的丢失状态timeSlotWeek add获取选择器公共的新状态”是什么意思?问题似乎在你们的减缩器中,你们能把它们添加到你们的问题中吗?当我分派timeSlotWeek.GET_DATA_TIME_SLOT_WEEK_SUCCESS时,Selector.timeSlotWeek有一些值,当type:common.GET_FEEDBACK run时,Selector.timeSlotWeek变成initstate什么是
Selector.timeSlotWeek
?我在你的问题/代码片段中没有看到这样的东西。“当我调度/
timeSlotWeek.GET_DATA\u TIME\u SLOT\u WEEK\u SUCCESS
/
时”是什么意思?您是否通过redux开发工具手动调度操作?您是否也发送
payload`值?什么是“initState”和什么是“initState”"? 请尝试共享所有相关代码。我仍然认为我们需要看看你们的减速机在这些动作中做了什么。谢谢你们给我一个解决方法。你可以在我的邮箱里看到我的更新!在默认情况下重置为初始状态是疯狂的。