如何在 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;
}
我应该在我的应用程序(action creator、reducer、selector 或 React 组件)中如何以及在什么时候实施此 'maximum 3' 规则?理论上我可以拒绝任何将计数增加到 3 以上的操作,但我不知道使用 redux 执行此操作的最佳实践方法。
我认为这在减速器中效果最好。对于这些操作中的每一个,如果新的项目集有效,则 return 新的项目集,否则 return 当前的项目并可能随之设置错误。
我有一个包含数组的 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;
}
我应该在我的应用程序(action creator、reducer、selector 或 React 组件)中如何以及在什么时候实施此 'maximum 3' 规则?理论上我可以拒绝任何将计数增加到 3 以上的操作,但我不知道使用 redux 执行此操作的最佳实践方法。
我认为这在减速器中效果最好。对于这些操作中的每一个,如果新的项目集有效,则 return 新的项目集,否则 return 当前的项目并可能随之设置错误。