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

在Redux中嵌套常量是个好主意吗?,redux,ngrx,Redux,Ngrx,在我们的产品中,我们使用Angular 6和NgRX 6。我们使用对象来封装字符串,而不是export const字符串: export const ACTION_CONSTANTS = { 'OPEN_MODAL' : 'OPEN_MODAL', 'CLOSE_MODAL' : 'CLOSE_MODAL', 'OPEN_TOOLTIP'

在我们的产品中,我们使用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\u常量
对象变大,前缀变长(
'DROPDOWN\u ACTION\u SKIP\u SET\u INIT\u STATE'
),我更喜欢嵌套常量,例如通过功能:

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

这是一个好主意还是有任何缺点?我在上找不到任何关于格式化常量的内容。

我认为这不是一个坏主意,只要你能够将其组织起来。但我建议将您的操作分为不同的文件。我发现这是使事情井然有序的最好方法

--ActionsFile   
  -modalActions.js   
  -toolTipAction.js

我不认为这是一个坏主意,只要你能让一切井然有序。但我建议将您的操作分为不同的文件。我发现这是使事情井然有序的最好方法

--ActionsFile   
  -modalActions.js   
  -toolTipAction.js

我通常将动作保存在不同的文件中,大致与模型和减缩器对齐。我有一个命名约定,比如:

ACTION\u MODEL\u 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
是一个缓存所有注册操作并确保整个应用程序中没有重复操作的功能

现在,当您为特定模型导入操作时,您只从需要的文件中导入那些操作(例如,
从“操作/ProductGroupActions”导入ProductGroupActionTypes),并像ProductGroupActionTypes.LOAD\u PRODUCTGROUP
一样使用它们

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

第二个,使用
success
后缀在reducer中处理以更改状态


第三个是错误处理,不管你想用什么方式处理。

我通常将操作保存在不同的文件中,大致与模型和简化程序保持一致。我有一个命名约定,比如:

ACTION\u MODEL\u 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
是一个缓存所有注册操作并确保整个应用程序中没有重复操作的功能

现在,当您为特定模型导入操作时,您只从需要的文件中导入那些操作(例如,
从“操作/ProductGroupActions”导入ProductGroupActionTypes),并像ProductGroupActionTypes.LOAD\u PRODUCTGROUP
一样使用它们

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

第二个,使用
success
后缀在reducer中处理以更改状态


第三个是错误处理,不管你想用什么方式处理。

Imho的一个缺点是,在一个大型项目中,动作常数可以相等,而不需要注意(因为它们只是字符串),并激活2个减缩器。Imho的一个缺点是,在一个大型项目中,动作常数可以相等而不需要注意(因为它们只是字符串)并激活2个减速器。