是否有最佳做法/推荐方式断言还原行动是否良好?我是一个相当愚蠢的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分钟来诊断,我只能想象更大的应用程序。
答案 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}},其中包含一个描述如何安装和使用它的自述文件。