更新状态

时间:2017-03-26 06:45:18

标签: reactjs react-native redux react-redux

有效地,我每次更新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

1 个答案:

答案 0 :(得分:1)

像这样的reducer无法同时更新thicknesslitres,因为它只会影响它负责的节点(在这种情况下为thickness)。你可以:

  1. 将reducer移动到一个级别,让它拥有thicknesslitres个节点,即initialState = { thickness: 0, litres: 0 }
  2. litres缩减器同时处理UPDATE_THICKNESS操作类型并更新litres
  3. 但是,您也没有理由不发送'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 } })
        }
    }
    

    希望这有帮助。