Общие модификации для всех действий в редукторе - PullRequest
0 голосов
/ 12 апреля 2019

Так вот в чем проблема, мне нужно, чтобы некоторые модификации всегда выполнялись после каждого и каждого действия , за исключением одного. Итак, чтобы добиться этого, я сделал следующее. Есть ли лучший способ добиться этого?

export const reducer = (state, action) => {
  switch (action.type) {
    case 'AddCheckboxJson': {
      return ReducerWrapper({ ...state,objCheckBox:action.payload  });
    }
    case 'insertAt':return ReducerWrapper({
      ...state,objCheckBox:{...state.objCheckBox,
        Values:insertAt(action.payload.index,action.payload.entry,"iDisplayOrder",state.objCheckBox)
      }
    })
    case 'INSERT_ABOVE': 
      return ReducerWrapper({
        ...state, objRadio: {
          ...state.objRadio,
          Values: action.payload
        }
      })

    case 'INSERT_BELOVE': 
      return ReducerWrapper({
        ...state, objRadio: {
          ...state.objRadio,
          Values: action.payload
        }
      }),
    case 'REPLACE':return { ...action.payload }
    default: {
      return state;
    }
  }
};

Здесь функция ReducerWrapper делает общую модификацию

export const ReducerWrapper = State => {
   return {...State,
    //modifications done here
   }
}

1 Ответ

1 голос
/ 12 апреля 2019

Это действительно намного проще, чем кажется, просто вернитесь к двум сценариям, которые вы не хотите применить к дополнительному состоянию, т.е.

export const reducer = (state, action) => {
  switch (action.type) {
    case 'AddCheckboxJson': {
      state = { 
        ...state, 
        objCheckBox: action.payload 
      };
    }
    case 'insertAt': {
      state = {
        ...state,
        objCheckBox:{
          ...state.objCheckBox,
          Values: insertAt(
            action.payload.index, 
            action.payload.entry, 
            "iDisplayOrder", 
            state.objCheckBox
          )
        }
      }
    }
    case 'INSERT_ABOVE': { 
      state = {
        ...state, 
        objRadio: {
          ...state.objRadio,
          Values: action.payload
        }
      }
    }
    // presumably this should be INSERT_BELOW?
    case 'INSERT_BELOVE': {
      state = {
        ...state, 
        objRadio: {
          ...state.objRadio,
          Values: action.payload
        }
      }
    },
    // return the state early in both these scenarios
    case 'REPLACE': return { ...action.payload }
    default: return state;
  }

  // run additional state change
  return ReducerWrapper(state);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...