使用数字作为 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的新动作。砰,冲突。
用整数定义动作的问题,整数没有意义,缺乏信息,开发者之间不能交流。
使用 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的新动作。砰,冲突。
用整数定义动作的问题,整数没有意义,缺乏信息,开发者之间不能交流。