Это хорошая идея, чтобы вкладывать константы в Redux? - PullRequest
0 голосов
/ 25 сентября 2018

В нашем Продукте мы используем Angular 6 вместе с NgRX 6. Вместо , определяя наши константы как export const строки, мы используем объект для их инкапсуляции:

export const ACTION_CONSTANTS = {
    'OPEN_MODAL'                              : 'OPEN_MODAL',
    'CLOSE_MODAL'                             : 'CLOSE_MODAL',
    'OPEN_TOOLTIP'                            : 'OPEN_TOOLTIP',
    'CLOSE_TOOLTIP'                           : 'CLOSE_TOOLTIP',
    ...
};

Какобъект ACTION_CONSTANTS становится больше, а префиксы становятся длиннее ('DROPDOWN_ACTION_SKIP_SET_INIT_STATE'), я бы предпочел вкладывать константы, например, по признаку:

export const ACTION_CONSTANTS = {
    'MODAL' : {
        'OPEN'                                : 'MODAL.OPEN',
        'CLOSE'                               : 'MODAL.CLOSE'
    },
    'TOOLTIP' : {
        'OPEN'                                : 'TOOLTIP.OPEN',
        'CLOSE'                               : 'TOOLTIP.CLOSE'
    },
    ...
};

Это хорошая идея или есть недостатки? Я не смог найти ничего о форматировании констант в Redux FAQ .

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Я обычно храню действия в разных файлах, примерно выровненных по моделям и редукторам.И у меня есть соглашение об именах, например:

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 обрабатывается в редукторе для изменения состояния.

Третий - обработка ошибок, независимо от того, как вы хотите это сделать.

0 голосов
/ 25 сентября 2018

Я не думаю, что это плохая идея, если вы можете держать все это организованным.Но я бы предложил сгруппировать ваши действия в разные файлы.Я считаю, что это лучший способ сохранить порядок.

--ActionsFile   
  -modalActions.js   
  -toolTipAction.js
...