15

在 Flux 架构的示例和解释中——Facebook 的 React 对应物——动作类型名称被引用为枚举常量而不是字符串。(请参阅http://facebook.github.io/flux/上的示例)我只是在寻找说明为什么这是首选方法。

我看不出在创作和便利方面有什么好处,因为无论您输入constants.actionTypes.UPDATE_DATA(枚举常量)还是'UPDATE_DATA'(字符串),您都必须知道并输入确切的名称。事实上,有时使用非字符串会增加复杂性——例如,您不能轻松地创建一个将动作类型作为键并将动作处理程序作为值的对象。

是组织、缩小还是其他方面的好处?我很好奇。

4

1 回答 1

22

您在问题的最后谈到了它,但有几个好处。缩小是显而易见的。另一个是静态分析工具可以更轻松地找到用法并捕获错误。

根据您的通量实施,它们还可以帮助您捕获拼写错误。例如,在 Fluxxor 中,如果你尝试将 store 处理程序绑定到 action 类型undefined,你会得到一个异常;这意味着传递c.UPDATE_DTA会抛出,但传递'UPDATE_DTA'不会。

最后,它们可以帮助作为文档。如果您的应用程序生成的所有操作类型都集中定义为常量,则更容易一目了然地知道系统作为一个整体响应了哪些类型的操作。

BabelTraceur提供了一个 ES6 特性(但目前还没有 JSX 转换),它有助于创建对象字面量;语法是:

var handlers = {
  [const.UPDATE_DATA]: this.handleUpdateData,
  [const.OTHER_THING]: this.handleOtherThing
};
于 2014-11-24T16:43:30.857 回答