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