在Flux中使用ActionTypes有什么用?

时间:2017-09-12 23:43:28

标签: javascript flux

我正在关注https://github.com/facebook/flux/tree/master/examples/flux-todomvc

的第一个Flux教程

我对'TodoActionTypes.js'文件实际上做了什么感到有点困惑。

如果对我要问的内容不清楚,请告诉我,我会尽力清理。

我将尝试使用AppView的onToggleTodo道具进行解释:

<AppView /> renders <Main /> which has props.onToggleTodo which is triggered on onChange.

因此,onChange会触发TodoActions.toggleTodo。

从TodoActions中,触发toggleTodo,并将带有type和id的操作分派给商店

toggleTodo(id) {
    TodoDispatcher.dispatch({
        type: TodoActionTypes.TOGGLE_TODO,
        id,
    });
},

在TodoActionTypes.js中,有:

const ActionTypes = {
    ...
    TOGGLE_TODO: 'TOGGLE_TODO',
};

在TodoStore.js中,有一个

switch (action.type){
    case TodoActionTypes.TOGGLE_TODO:

我的问题是为什么有必要这样做,而不仅仅是在任何地方开始使用'TOGGLE_TODO'?

1 个答案:

答案 0 :(得分:2)

与使用文字字符串相比,此模式提供了许多好处:

  • 由于手动错误地输入值而导致的错误更容易跟踪。如果您使用TypeScript之类的类型检查工具,编译器会清楚地标记这一点。至少你会看到undefined代替一个非常相似的值,你的眼睛可能会自动认为是正确的。
  • 在这种情况下,支持重构的编辑可以这样做。
  • 可以轻松更改值(值和/或类型)。例如,您可能决定将该值用作位掩码,因此您必须将类型更改为整数。
  • 它为其他项目贡献者提供了清晰的可能TodoActionTypes列表。
  • 它提供了以编程方式访问和推理可能的TodoActionTypes(例如使用for..in循环)的功能。