Redux, тип действия не отправлен - PullRequest
0 голосов
/ 06 апреля 2020

Я создаю редуктор в Redux со следующей функцией:

export const createSingleObjectReducer = (updateActionType, initialState = {}, debug = false) => {
  const reducer = (state = initialState, action) => {
    if (!action) {
      return state
    }   

    switch (action.type) {
      case updateActionType: {
        if (action.updates === undefined) {
          console.error(`Invalid ${updateActionType} action: action.updates is undefined: `, action)
          return state
        }   

        const newState = { ...state, ...action.updates }
        if (debug) {
          console.log('singleObjectReducer: applying action: ', action, 'State changing from ', state, ' to ', newState)
        }   
        return newState
      }   
      default:
        return state
    }   
  }

  return reducer
}

Примерно так:

export const RECEIVE_VARIANT_TAGTYPES_DATA = 'RECEIVE_VARIANT_TAGTYPES_DATA'

const rootReducer = combineReducers(Object.assign({
  ...
  ...
    variantTagTypesData: createSingleObjectReducer(RECEIVE_VARIANT_TAGTYPES_DATA, {
    variantTagTypes: {},
    variantFunctionalTagTypes: {},
  }),
  ...
}))

И затем отправляю действие в другой файл, подобный этому:

dispatch({ type: RECEIVE_VARIANT_TAGTYPES_DATA,
  updates: {
    variantTagTypes: responseJson.variantTagTypes,
    variantFunctionalTagTypes: responseJson.variantFunctionalTagTypes,
  },  
})  

Действие не отправлено по неизвестной причине. Каковы возможные причины этого?

1 Ответ

0 голосов
/ 06 апреля 2020

Проблема заключалась в том, что я отправлял несколько действий до RECEIVE_VARIANT_TAGTYPES_DATA, и происходило следующее: отправляются предыдущие действия, затем происходят обновления, вызываются селекторы, некоторые компоненты начинают рендеринг, что вызывает cra sh, поскольку RECEIVE_VARIANT_TAGTYPES_DATA еще не был отправлен и соответствующие данные обновлены. Было бы хорошо, если бы у нас было несколько оберток вокруг нескольких dispatch - операторов, чтобы гарантировать, что первое состояние должно быть изменено в соответствии со всеми из них, и только тогда могут произойти другие вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...