reactjs - 更新状态的多个部分的 Reducer

标签 reactjs react-native redux react-redux

实际上,每次更新 state.thickness 时,我都需要更新 state.litres。我怎么做? (我使用“state”这个词来表示 redux store)

这是我的 reducer :

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 一起归还 - 这是我更新 state 的尝试。升 当我更新 state.thickness 时。

如果你能对此发表意见,加分:为了计算升,我需要访问整个状态(redux 存储)以传递给 calcVol(state)(它计算并返回容积(升)。像这样在 action 中传递整个状态,以便我可以在 reducer 中使用它,性能?还是有更高效的方式?

const mapDispatchToProps = (dispatch) => ({
  updateThickness: (text, number, state) => {
    dispatch(updateDimension('thickness', text, number, state))
  }
})

最佳答案

像这样的 reducer 不能同时更新 thicknesslitres 因为它只能影响它负责的节点(在这种情况下为 thickness ).您可以:

  1. 将 reducer 向上移动一个级别并让它同时拥有 thicknesslitres 节点,即 initialState = { thickness: 0, litres: 0 } }
  2. litres reducer 也处理 UPDATE_THICKNESS 操作类型并相应地更新 litres

但是,您没有理由不能同时调度 'UPDATE_LITRES' 操作。如果你使用像 redux-thunk 这样的中间件那么这就更容易了,因为你可以从同一个 thunk 发送两者,而且它还可以消除在 Action 中传递整个状态的需要(我不推荐,但没有数字来支持它) .

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 } })
    }
}

希望这对您有所帮助。

关于reactjs - 更新状态的多个部分的 Reducer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43025904/

相关文章:

reactjs - 在 Tailwind CSS 中使用悬停定位子元素

javascript - 在 React Native 中,我的代码没有呈现任何内容

ios - 在 Expo.io 中,我们如何为 ios Build 指定配置设备?

javascript - react /归零 : redirect after loggin

reactjs - 使用react-redux-router时出现 `Element type is invalid: expected a string `错误

javascript - 在 componentDidMount 中获取数据时出现警告 "Can only update a mounted or mounting component"

jquery - 如何使用 ES6/ES7 语法导入 jQuery UI?

reactjs - 在 React Native 中使用条件渲染的最佳方法

javascript - 你如何在 Vue 中条件绑定(bind) v-model?

ios - React Native fbsdk 添加权限