【问题标题】:Setting initial state in Redux sub-reducers在 Redux 子减速器中设置初始状态
【发布时间】:2017-03-10 10:16:20
【问题描述】:

我开始了解 Redux 中的 reducer 组合概念,我对如何在 sub-reducer 中设置初始状态感到困惑。

一个类似的问题是this,但它只涉及状态树每个部分的顶级 reducer。

据我了解,每个 reducer 都应该为其负责的状态树部分提供初始状态。

例如,如果我有这样的状态树:

{
  dashboard:{
    stats:{
      sales:23,
      purchases:22
    },
    messages:{
      unread:3,
      draft:5
    },
    //...etc
  },
  //...
}

我有一个用于仪表板的顶级减速器,以及用于stats 和messages 的减速器,应该在仪表板减速器中设置仪表板部件的初始状态,还是在每个部件的减速器中设置,如果是的话,这段代码会是什么样子?

我最初的想法是像这样实现仪表板减速器:

const initialState = {
  stats: {},
  messages: {},
  //...
}

export default function dashboard(state = initialState, action) {
  switch (action.type) {
    case FETCH_STATS:
    case FETCH_STATS_SUCCESS:
    case FETCH_STATS_FAILURE:
      return {
        ...state,
        stats: stats(state.stats, action)
      }
    case FETCH_MESSAGES:
    case FETCH_MESSAGES_SUCCESS:
    case FETCH_MESSAGES_FAILURE:
      return {
        ...state,
        messages: messages(state.messages, action)
      }
      //...any other action cases
    default:
      const combined = combineReducers({
        stats,
        messages
      })
      return {
        ...state, //for any part without a reducer
        ...combined
      }
  }
}

我的推理正确吗?也欢迎任何改进建议。

【问题讨论】:

    标签: javascript reactjs redux reducers


    【解决方案1】:

    两者都行。唯一想到的是,没有初始状态,它并不真正符合 Redux reducer 的定义;它不会孤立地工作,因为 Redux 期望初始状态不是未定义的。

    在任何情况下,在 sub-reducer 上设置初始状态都是无害的

    export default function stats(state = {}, action) {
        // ... whwtever
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-10
      • 2016-10-15
      • 2021-06-04
      • 2021-03-10
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      • 2019-06-26
      相关资源
      最近更新 更多