如何在redux中强制执行数据约束
How to enforce data constraints in redux
我有一个redux/react应用程序,它包含一个数组。此数组的每个元素都有一个数字属性,这些属性的总和不能超过3。因此,这些选项中的任何一个都可以:
arrayState: [
{id: "a", number: 3}
]
arrayState: [
{id: "a", number: 1},
{id: "b", number: 2}
]
arrayState: [
{id: "a", number: 1},
{id: "b", number: 1}
{id: "c", number: 1}
]
然后,我有一个reducer,它添加了一个新的数组项,并编辑了一个现有项的编号(这使用了React Update Addon语法,希望它是不言自明的)
function items(items = INITIAL_STATE, action) {
switch (action.type) {
case actionTypes.ADD_ITEM
return update(items, {$push: [INITIAL_STATE[0]]});
break;
case actionTypes.SET_ITEM_NUMBER:
return update(items, {[action.index]: {number: {$set: action.number}}});
break;
}
return items;
}
我应该如何以及在我的应用程序(动作创建者、减少器、选择器或React组件)中的什么时候实现这个"最大3"规则?理论上,我可以拒绝任何会将计数增加到3以上的操作,但我不知道用redux实现这一点的最佳实践方法。
我认为这在减速器中效果最好。对于这些操作中的每一个,如果新的项目集有效,则返回该新集,否则返回当前项目,并可能同时设置一个错误。
相关文章:
- 使用技巧在javascript中强制执行私有继承
- Javascript RegEx-强制执行两个最大长度
- 在 gruntjs 构建失败的情况下强制执行某些任务
- 在ExtJs 4网格中强制执行唯一键值
- 强制执行本地托管Web应用程序的许可证
- 如何在JavaScript中强制执行单线程行为
- 对文本框强制执行大小写约束
- 用于强制执行 JSON 结构的 Javascript 类
- 结合 href 引导程序自动执行数据切换
- JSHINT:有没有办法忽略仅驼峰大小写属性并将其强制执行到变量和函数上
- 如何使用 JavaScript 在输入后强制执行函数
- 在 ajax 之后执行数据表或重新绘制表
- 唯一字段约束在 dropDatabase 之后未强制执行
- 有没有办法检查是否强制执行严格模式
- 阻止执行数据 ajax 属性
- 如何对 Flux 存储中的状态变量强制执行隐私
- 在部分回发后强制执行 JavaScript(更新面板)
- 如何通过文件 API 从 json 文件执行数据
- 在Razor生成的隐藏字段上强制执行类型,在没有强制转换的JavaScript中接收变量
- 如何在redux中强制执行数据约束