需要帮助设计Redux应用程序(减少所需的操作数)

时间:2018-08-28 18:29:44

标签: reactjs react-native react-redux

我是redux的新手,目前处于应用程序的设计阶段。我希望有人告诉我我提出的方法是否好(或对此事有效),或者是否有更好的方法来做我想做的事情。

主要问题是我有 具有许多具有相同结构的对象的应用程序。对于这些对象,我将 希望能够进行更新。如果可以避免为每个动作写一个动作,那将是很好的 更新,而可以进行更一般的更新。

这是我的状态的示例

initialState = {
   commonPumpItems:      
        [
            basalRate: {units: ml/hr, activeValue: 125.0, minValue: 3, maxValue: 4}, 
            doseVolume: {units: ml/hr, activeValue: 125.0, minValue:3, maxValue: 4},
            doseRate: {units: ml/hr, activeValue: 135.9, minValue: 5, maxValue: 10},
            ...(about 10 more of these)
        ],
    kvoRate: {status: true, minValue: 0, maxValue: 1}
}

commonPumpItems是具有单位activeValue,minValue,maxValue的对象。 我想避免不得不写一些动作,例如

updateBasalRateValue()
updatedoseVolumeValue()
updatedoseRateValue()
updateBasalRateUnits()
etc

我该如何构造动作创建者和减速器,所以我只有一些常规动作,例如

updateCommonPumpItem(name, propertyToUpdate, newValue)

然后可以这样称呼

updateCommonPumpItem(basalRate, units, ml)

我的想法是要有这样的东西

def updateCommonPumpItem(name, propToUpdate, newValue){
    return {type: "update", name, propToUpdate, newValue}
}



Then in Reducer.js have something like this

function reducer(state = initialState, action){
     switch (action.type){

           case update: 
               state.commonPumpItems.map( (pumpObject) => {
                     if (pumpObject.name === action.name){
                        return Object.assign{{}, pumpObject, {action.propToUpdate: action.newValue}
                     }
                     else{
                        return pumpObject
                         }
           ..... bunch of other stuff

1 个答案:

答案 0 :(得分:0)

我意识到没有必要使事情变得如此复杂。除了将commonPumpItems存储在数组中之外,我还可以将它们作为属性存储在对象中。这是IMO的更好方法,因为它消除了在我的减速器中搜索特定项目的需要。