在Redux中嵌套常量是一个好主意吗?

时间:2018-09-25 07:56:02

标签: redux ngrx

在我们的产品中,我们将Angular 6与NgRX 6结合使用。我们使用一个对象来封装defining our constants as 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 :(得分:2)

我认为这不是一个坏主意,只要您能够将其保持井井有条。但我建议将您的操作分组到不同的文件中。我发现这是使事情井井有条的最佳方法。

--ActionsFile   
  -modalActions.js   
  -toolTipAction.js

答案 1 :(得分:0)

我通常将动作保存在不同的文件中,大致与模型和化简器保持一致。而且我有一个类似的命名约定:

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

通常,第一个(不带结果后缀)是启动操作并在reducer中设置一些pending标志以显示加载程序并在@Effects中发起http调用的人。

第二个是在减速器中处理后缀为success的状态以更改状态。

第三种是错误处理,无论您想采用哪种方式。