【问题标题】:Use Numbers For Redux Action Names使用数字作为 Redux 操作名称
【发布时间】:2017-01-09 10:58:28
【问题描述】:

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

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

【问题讨论】:

  • 是的,允许 int 作为动作类型会很棒,因为它们可以使用 typescript 的枚举功能并且具有强类型的动作“类型”。

标签: javascript reactjs ecmascript-6 redux react-redux


【解决方案1】:

在 redux 架构中,action 被分派到 store,而不是单个 reducer。因此,您可以拥有多个对相同操作做出反应的减速器。这也是为什么你在 reducer 中的 switch 语句中有一个类似 default: return state 的分支的原因。

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2016-01-28
      • 2017-02-21
      相关资源
      最近更新 更多