在Redux子减速器中设置初始状态

时间:2017-03-10 10:16:20

标签: javascript reactjs redux reducers

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

类似的问题是this,但它仅涉及状态树每个部分的顶级缩减器。

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

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



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




如果仪表板部件的初始状态设置在仪表板减速器中,或者在仪表板中,我有一个用于仪表板的顶级减速器,以及statsmessages的减速器。每个部分的缩减器,如果是这样,这段代码会是什么样的?

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



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




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

1 个答案:

答案 0 :(得分:1)

要么工作。我唯一想到的是,如果没有初始状态,它就不适合 Redux 减速器的定义;它不会孤立地工作,因为Redux期望初始状态不会被定义。

在任何情况下,将子减速器上的初始状态设置为

是相当无害的
export default function stats(state = {}, action) {
    // ... whwtever
}