【问题标题】:How to enforce data constraints in redux如何在 redux 中强制执行数据约束
【发布时间】:2016-03-24 16:39:41
【问题描述】:

我有一个包含数组的 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;
}

我应该如何以及在我的应用程序(动作创建器、reducer、选择器或 React 组件)中的什么时候实现这个“最大 3”规则?从理论上讲,我可以拒绝任何将计数增加到 3 以上的操作,但我不知道使用 redux 执行此操作的最佳实践方式。

【问题讨论】:

    标签: javascript reactjs flux redux


    【解决方案1】:

    我认为这在减速器中效果最好。对于这些操作中的每一个,如果新的项目集有效,则返回该新集,否则返回当前项目并可能设置错误。

    【讨论】:

    • 这似乎是一个优雅的解决方案
    • 如果我要在reducer中设置错误,我会使用action来设置,还是直接在reducer中修改状态?
    • 我会在你使用减速器时设置错误。您可能需要将您的状态参数更新为(state = INITIAL_STATE, action) 并使用state.itemsstate.error。当项目无效时设置错误,否则清除错误。
    猜你喜欢
    • 2011-09-07
    • 2012-12-05
    • 2015-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    相关资源
    最近更新 更多