Redux.js:捕捉格式错误的行为?

时间:2016-11-30 07:03:15

标签: javascript reactjs redux react-redux

是否有最佳做法/推荐方式断言还原行动是否良好?我是一个相当愚蠢的JavaScript程序员(从20年的C ++ / Java / C#开始)并因缺乏强类型而被抛弃。

具体来说,我试图解决的用例是:

1.使用React + Redux“ToDo”应用程序(http://redux.js.org/docs/basics/ExampleTodoList.html

2.使用动作创建者:

export function toggleTodo(index) {
  return { type: TOGGLE_TODO, index }
}

3.with reducer code snippet:

case TOGGLE_TODO:
  if (state.id !== action.id) {
    return state
  }

请注意,索引 ID 不匹配。但是,他们应该 - 这是一个错误。这花了我30分钟来诊断,我只能想象更大的应用程序。

1 个答案:

答案 0 :(得分:1)

您是否考虑过创建一个代表Action类型的Class,然后让它处理验证,就像这样......

class ToggleAction {
   constructor(o) {
     if (
       typeof o === 'object' &&
       typeof o.type === 'string' &&
       typeof o.id === 'number'
     ) {
       this.type = "TOGGLE_TODO"; 
       this.id = o.id
     } else {
       throw new Error('Invalid ToggleAction');
     }
   }

   toObject() {
     return { type: this.type, id: this.id };
   }
}

然后你可以在动作创建者中使用它......

export function toggleTodo(index) {
  return new ToggleAction({ id: index }).toObject();
}

在减速机中就像这样......

case TOGGLE_TODO:
  const toggleAction = new ToggleAction(action)
  if (state.id !== toggleAction.id) {
    return state
  }

如果所有这些都运行良好,您可以创建一个生成ActionType类的ActionFactory。

编辑:我创建了一个名为redux-action-validator的{​​{3}},其中包含一个描述如何安装和使用它的自述文件。