Javascript 使用数字作为重复操作名称
使用Redux时的一个常见约定是将操作作为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
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的枚举功能并使操作“类型”强类型化。