javascript - Redux.js : catching malformed actions?

标签 javascript reactjs redux react-redux

是否有最佳实践/推荐方法来断言 redux 操作格式良好?我是一个相当菜鸟的 JavaScript 程序员(有 20 年的 C++/Java/C# 经验),并且因缺乏强类型而感到困惑。

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

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

2.使用 Action 创建器:

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

3.withreducer代码片段:

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

请注意,indexid 不匹配。然而,他们应该有——这是一个错误。我花了 30 分钟来诊断,我只能想象更大的应用程序。

最佳答案

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

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 };
   }
}

然后你可以在 Action 创建器中像这样使用它......

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

像这样在 reducer 中......

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

如果一切顺利,您可以创建一个生成 ActionType 类的 ActionFactory。

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

关于javascript - Redux.js : catching malformed actions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40882204/

相关文章:

javascript - 从数组中删除多个对象并返回更新后的数组

javascript - 如何在react.js中向变量名添加另一个变量值

javascript - 如何从本地文件夹加载图像?

javascript - 状态如何传递到react-redux应用程序中的选择器?

javascript - 在 Firefox 中首次单击时,React.js 组件中的选择元素不会更新

javascript - VueJs 在 v-select 中使用计算变量的无限循环

Javascript 用空格替换查询字符串 +

reactjs - 使用react-leaflet渲染GeoJSON

javascript - 为什么我无法访问此 ng-repeat 中的数据?

javascript - Windows 8 WinJS 应用程序中的应用程序启动是否有唯一的 session ID?