有效地,我每次更新state.litres
时都需要更新state.thickness
。我怎么做? (我使用“state”这个词来表示redux商店)
这是我的减速机:
export const thickness = (
initialThickness: Map<*, *> = initialState.get('thickness'),
action: Object) => {
switch(action.type) {
case 'UPDATE_THICKNESS': {
const litres = calcVol(action.payload.state)
let newThickness = initialThickness
.set('thickness' + action.payload.number, action.payload.value)
return newThickness
}
default:
return initialThickness
}
}
litres
是我刚刚添加的内容,我希望将其与newThickness
一起返回 - 这是我在更新{{1}时尝试更新state.litres
}}。
奖励积分如果你可以对此发表意见:为了计算升,我需要访问整个州(redux商店)以传递给state.thickness
(以cal为单位计算并返回音量)。将calcVol(state)
中的整个状态传递给这样,以便我可以在action
中使用它,效果如何?还是有更高效的方式?
reducer
答案 0 :(得分:1)
像这样的reducer无法同时更新thickness
和litres
,因为它只会影响它负责的节点(在这种情况下为thickness
)。你可以:
thickness
和litres
个节点,即initialState = { thickness: 0, litres: 0 }
litres
缩减器同时处理UPDATE_THICKNESS
操作类型并更新litres
。但是,您也没有理由不发送'UPDATE_LITRES'
行动。如果你正在使用像redux-thunk
这样的中间件,那么这就更容易了,因为你可以从同一个thunk中调度它们,并且它也可以消除在动作中传递整个状态的需要(我不会推荐,但没有数字支持)。
const setThickness = (number, value) => {
return (dispatch, getState) => {
dispatch({ type: 'UPDATE_THICKNESS': payload: { number, value } })
let litres = calcVol(getState())
dispatch({ type: 'UPDATE_LITRES': payload: { number, value: litres } })
}
}
希望这有帮助。