Redux 和 redux saga 从商店中删除值

Redux and redux saga removes values from store

类似这样的问题搜索了一段时间,但没有找到任何内容。 基本上,当用户登录到会话时,从 redux saga 调用设置获取,然后我将这些值放在适当的存储中,但是当我执行另一个甚至不从该 reducer 调用函数的操作时,我神奇地看到了我的物品从那家商店消失,只留下 15 件物品中的 3 件。搜索了整个应用程序,看看我是否在其他地方调用了 setSettings 但没有,只是在 1 个地方(saga)。 截图和代码如下: the setadditionalinfo is a function from the interface reducer that doesn't even have a saga!

functionality.saga.js

export function* settingsStartProcess() {
  try {
    const response = yield call(SYSTEMCALLS.fetchSettings)
    yield put(setSettings(response.data));
  } catch (error) {
    yield put(setFetchSettingsFailure(error.message));
  }
}

export function* fetchSettingsStart() {
  yield takeLatest(
    FunctionalityActionTypes.FETCH_SETTINGS_START,
    settingsStartProcess
  );
}


export function* functionalitySagas() {
  yield all([
    call(fetchSettingsStart),
  ]);
}

functionality.reducer.js

const functionalityReducer = (state = INITIAL_STATE, action) => {
  switch (action.type) {
    case FunctionalityActionTypes.SET_SETTINGS:
      return {
        ...state,
        isLoading: false,
        functions: convertFunctions(action.payload.funzionalita, true),
        branches: action.payload.sigleRami
      };
    case FunctionalityActionTypes.FETCH_SETTINGS_START:
      return {
        ...state,
        isLoading: true
      };
    case FunctionalityActionTypes.FETCH_SETTINGS_FAILURE:
      return {
        ...state,
        isLoading: false,
        error: action.payload
      };
    default:
      return state;
  }
};

想要也添加这个 user.selector 代码,如果它可以干扰状态,但不应该:

export const selectCleanUserBranches = createSelector(
  [selectUser, selectFunc],
  (user, func) => createCleanDataFromUserSigle(user.currentUser.sigle, func.branches)
);

export const selectTreeDataUserBranches = createSelector(
  [selectUser, selectFunc],
  (user, func) => convertSigleToTreeData(createCleanDataFromUserSigle(user.currentUser.sigle, func.branches))
);

为遇到相同问题的任何人找到解决方案。 显然我跳过了一个非常重要的部分,其中选择器 return 是参考而不是 一个干净的物体。 因此,将可能会更改选择器的函数包装在 import {produce} from 'immer' 中或在函数调用 Object.assign() 中进行非引用克隆。