【问题标题】:Redux and redux saga removes values from storeRedux 和 redux saga 从存储中删除值
【发布时间】:2020-11-05 12:28:16
【问题描述】:

搜索了一段时间这样的问题,但找不到任何东西。 基本上,当用户登录到会话时,从 redux saga 调用设置获取,然后我将这些值放在适当的存储中,但是当我执行另一个甚至不从该 reducer 调用函数的操作时,神奇地我看到了我的物品从那家商店消失,15 个物品中只剩下 3 个。搜索整个应用程序,看看我是否在其他地方调用了 setSettings,但没有,只是在 1 个地方(传奇)。 截图和代码如下: 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))
);

【问题讨论】:

    标签: reactjs redux react-redux redux-saga


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-23
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      相关资源
      最近更新 更多