Я обычно храню действия в разных файлах, примерно выровненных по моделям и редукторам.И у меня есть соглашение об именах, например:
ACTION_MODEL_OUTCOME
Так, например, для загрузки модели типа ProductGroup
у меня будут действия:
export const ActionTypes = {
LOAD_PRODUCTGROUP: enforceUnique("[ProductGroup] Laod ProductGroup"),
LOAD_PRODUCTGROUP_SUCCESS: enforceUnique("[ProductGroup] Load ProductGroup Success")
LOAD_PRODUCTGROUP_FAILURE: enforceUnique("[ProductGroup] Load ProductGroup Failure")
}
enforceUnique
- это функция, которая кэширует все зарегистрированные действия и следит за тем, чтобы во всем приложении не было дубликатов.
Теперь, когда вы импортируете действия для определенной модели, вы импортируете только те из файлов, которые вам нужны (например, import ProductGroupActionTypes from 'actions/ProductGroupActions') and use them like ProductGroupActionTypes.LOAD_PRODUCTGROUP
.
Обычно первый (без суффикса результата) - это тот, который инициирует действие и устанавливает некоторый флаг pending
в редукторе, чтобы показать загрузчик, а также инициировать вызовы http в @Effects
.
Второй с суффиксом success
обрабатывается в редукторе для изменения состояния.
Третий - обработка ошибок, независимо от того, как вы хотите это сделать.