Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用数字作为重复操作名称_Javascript_Reactjs_Ecmascript 6_Redux_React Redux - Fatal编程技术网

Javascript 使用数字作为重复操作名称

Javascript 使用数字作为重复操作名称,javascript,reactjs,ecmascript-6,redux,react-redux,Javascript,Reactjs,Ecmascript 6,Redux,React Redux,使用Redux时的一个常见约定是将操作作为consts存储在自己的文件中,如下所示: export const USER_AUTH_ATTEMPT = 'USER_AUTH_ATTEMPT'; export const USER_AUTH_CHECK = 'USER_AUTH_CHECK'; export const USER_AUTH_FAIL = 'USER_AUTH_FAIL'; export const USER_AUTH_SUCCESS = 'USER_AUTH_SUCCESS'; e

使用Redux时的一个常见约定是将操作作为
const
s存储在自己的文件中,如下所示:

export const USER_AUTH_ATTEMPT = 'USER_AUTH_ATTEMPT';
export const USER_AUTH_CHECK = 'USER_AUTH_CHECK';
export const USER_AUTH_FAIL = 'USER_AUTH_FAIL';
export const USER_AUTH_SUCCESS = 'USER_AUTH_SUCCESS';
export const USER_AUTH_LOGOUT = 'USER_AUTH_LOGOUT';
操作名称的值通常是
字符串
。使用这样的约定有什么好处吗

export const USER_AUTH_ATTEMPT = 0;
export const USER_AUTH_CHECK = 1;
export const USER_AUTH_FAIL = 2;
export const USER_AUTH_SUCCESS = 3;
export const USER_AUTH_LOGOUT = 4;

操作的值将存储为整数,这样可以减小文件大小。这样做会有任何负面影响吗?

在redux体系结构中,操作被分派到存储区,而不是单个还原器。因此,可以有多个还原剂对同一动作作出反应。这也是为什么在减速机内的switch语句中有一个类似于
的default:returnstate分支的原因

如果您这样做,您必须完全确保没有两个操作具有相同的编号ID,这比使用字符串更难

另一个重要原因是调试,例如使用redux logger(它将打印数字,而不是有用的描述性操作名称)


编辑:钱月的回答给出了另一个不这样做的很好的理由。

在redux架构中,动作被分派到一个存储,而不是一个减速机。因此,可以有多个还原剂对同一动作作出反应。这也是为什么在减速机内的switch语句中有一个类似于
的default:returnstate分支的原因

如果您这样做,您必须完全确保没有两个操作具有相同的编号ID,这比使用字符串更难

另一个重要原因是调试,例如使用redux logger(它将打印数字,而不是有用的描述性操作名称)


编辑:钱月的回答提供了另一个很好的理由不做这件事。

汤姆给出了一个很好的答案,这里我只想补充一点。考虑到一个大型项目,有超过1名开发人员。开发人员A想要添加一个动作,他检查动作列表,发现5是一个自由数,所以他用5定义了他的新动作。同时,开发人员B还想添加一个动作,同样的,他用5定义了他的新动作。砰,冲突


用integer定义操作的问题是integer没有意义,它缺乏信息,开发人员之间无法交流

汤姆给出了一个很好的答案,在这里我只想再补充一点。考虑到一个大型项目,有超过1名开发人员。开发人员A想要添加一个动作,他检查动作列表,发现5是一个自由数,所以他用5定义了他的新动作。同时,开发人员B还想添加一个动作,同样的,他用5定义了他的新动作。砰,冲突


用integer定义操作的问题是integer没有意义,它缺乏信息,开发人员之间无法交流

是的,允许Int作为操作类型是非常棒的,因为它们可以使用typescript的枚举功能并使操作“类型”强类型化。是的,允许Int作为操作类型是非常棒的,因为它们可以使用typescript的枚举功能并使操作“类型”强类型化。