使用数字作为 Redux 操作名称

Use Numbers For Redux Action Names

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

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';

动作名称的值通常是 string。使用这样的约定会有什么好处吗?:

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 架构中,action 被分派到一个 store,而不是单个 reducer。所以你可以有多个 reducer 对同一个动作做出反应。这也是为什么在 reducer 中的 switch 语句中有一个类似于 default: return state 的分支。

如果你这样做,你必须完全确定没有两个动作具有相同的数字 ID,这比字符串更难。

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

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

Tom已经给出了很好的答案,这里我想补充一点。考虑到一个大项目,有不止 1 个开发人员。开发者A想添加一个动作,他查看动作列表,发现5是一个自由数字,所以他定义了他的新动作5。同时,开发者B也想添加一个动作,同样的事情,他定义了他的5的新动作。砰,冲突。

用整数定义动作的问题,整数没有意义,缺乏信息,开发者之间不能交流。