在整个Flux架构的示例和解释中 - Facebook与React相对应 - 操作类型名称被引用为枚举常量而不是字符串。 (参见http://facebook.github.io/flux/的例子)我正在寻找关于为何这是首选方法的清晰说明。
我认为在创作方面没有任何好处。方便,因为无论您键入constants.actionTypes.UPDATE_DATA
(枚举常量)还是'UPDATE_DATA'
(字符串),您都必须知道并输入确切的名称。实际上,有时使用非字符串会增加复杂性 - 例如你不能轻易地将具有操作类型的对象作为键和操作处理程序作为值。
组织,缩小或其他方面的好处是什么?我很好奇。
答案 0 :(得分:21)
你在问题的最后提到了它,但有一些好处。缩小是显而易见的;另一个原因是静态分析工具可以更容易地找到用法并发现错误。
根据您的助焊剂实施情况,它们还可以帮助您捕捉拼写错误。例如,在Fluxxor中,如果您尝试将存储处理程序绑定到操作类型undefined
,则会出现异常;这意味着传递c.UPDATE_DTA
将抛出,但传递'UPDATE_DTA'
将不会。
最后,他们可以帮助充当文档。如果应用程序生成的所有操作类型都集中定义为常量,则可以更容易地一目了然地了解系统作为整体响应的操作类型。
可以使用Babel或Traceur(但目前不支持JSX转换)的ES6功能有助于创建对象文字;语法是:
var handlers = {
[const.UPDATE_DATA]: this.handleUpdateData,
[const.OTHER_THING]: this.handleOtherThing
};