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

Enums 为什么Flux架构示例对操作类型使用常量而不是字符串?,enums,constants,reactjs,reactjs-flux,Enums,Constants,Reactjs,Reactjs Flux,在整个Flux架构的示例和解释中(Facebook对应于React),操作类型名称被引用为枚举常量而不是字符串。(参见中的示例)我只是想了解为什么这是首选方法 我不认为在创作和方便性方面有什么好处,因为无论您键入常量.actionTypes.UPDATE\u DATA(枚举常量)还是“UPDATE\u DATA”(字符串),您都必须知道并键入确切的名称。事实上,有时使用非字符串会增加复杂性——例如,您不能像创建键那样轻松地创建操作类型为、值为操作处理程序的对象 组织、小型化或其他方面的好处是什么

在整个Flux架构的示例和解释中(Facebook对应于React),操作类型名称被引用为枚举常量而不是字符串。(参见中的示例)我只是想了解为什么这是首选方法

我不认为在创作和方便性方面有什么好处,因为无论您键入
常量.actionTypes.UPDATE\u DATA
(枚举常量)还是
“UPDATE\u DATA”
(字符串),您都必须知道并键入确切的名称。事实上,有时使用非字符串会增加复杂性——例如,您不能像创建键那样轻松地创建操作类型为、值为操作处理程序的对象


组织、小型化或其他方面的好处是什么?我很好奇。

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

根据您的flux实现,它们还可以帮助您捕获拼写错误。例如,在Fluxxor中,如果尝试将存储处理程序绑定到
未定义的操作类型
,则会出现异常;这意味着传递
c.UPDATE\u DTA
将抛出,但传递
'UPDATE\u DTA'
将不会抛出

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

有一个ES6特性可用于or(但目前不适用于JSX转换),它有助于创建对象文本;语法是:

var handlers = {
  [const.UPDATE_DATA]: this.handleUpdateData,
  [const.OTHER_THING]: this.handleOtherThing
};

回答得很好。谢谢,布兰登!这些正是我想要的细节。很好的解释。实际上,在任何javascript版本中,您都可以通过使用像这样的帮助程序来获得非常相似的语法,从而实现ES6的出色文字点滴。顺便说一句,你也可以使用Babeljs实现它。我不认为一旦它们被导出,你就可以缩小它们(如果我错了,请纠正我)。