Нужна помощь в разработке приложения Redux (сокращение количества необходимых действий) - PullRequest
0 голосов
/ 28 августа 2018

Я новичок в Redx am и в настоящее время на стадии разработки моего приложения. Я надеюсь, что кто-то скажет мне, является ли мой предложенный подход хорошим (или даже действительным в этом отношении) или если есть лучший способ сделать то, что я пытаюсь сделать.

Основная проблема в том, что у меня есть приложение, которое имеет много объектов, имеющих одинаковую структуру. Для каждого из этих объектов я буду хочу иметь возможность предварительно обновлять обновления. Было бы неплохо, если бы я мог избежать написания действий для каждого обновить и вместо этого может исправить более общее обновление.

Вот пример того, как будет выглядеть мое состояние

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 голосов
/ 29 августа 2018

Я понял, что нет необходимости делать вещи такими сложными. Вместо хранения commonPumpItems в массиве я могу просто сохранить их как свойства в моем объекте. Это лучший подход IMO, потому что он устраняет необходимость поиска конкретного элемента в моем редукторе.

...