为什么Flux架构示例将常量用于操作类型而不是字符串?

dav*_*ark 15 enums constants reactjs reactjs-flux

在整个Flux架构的例子和解释中 - Facebook与React的对应 - 动作类型名称被引用为枚举常量而不是字符串.(参见http://facebook.github.io/flux/上的例子)我正在寻找一个清楚的原因,为什么这是首选的方法.

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

组织,缩小或其他方面的好处是什么?我很好奇.

Mic*_*ley 21

你在问题的最后提到了它,但有一些好处.缩小是显而易见的; 另一个原因是静态分析工具可以更容易地找到用法并捕获错误.

根据您的助焊剂实施情况,它们还可以帮助您捕捉拼写错误.例如,在Fluxxor中,如果您尝试将存储处理程序绑定到操作类型undefined,则会出现异常; 这意味着传球c.UPDATE_DTA将投掷,但传球'UPDATE_DTA'不会.

最后,他们可以帮助充当文档.如果应用程序生成的所有操作类型都集中定义为常量,则可以更容易地一目了然地了解系统作为整体响应的操作类型.

BabelTraceur提供了一个ES6功能(但目前不支持JSX转换),这有助于创建对象文字; 语法是:

var handlers = {
  [const.UPDATE_DATA]: this.handleUpdateData,
  [const.OTHER_THING]: this.handleOtherThing
};
Run Code Online (Sandbox Code Playgroud)