2017-03-10 31 views
0

我開始瞭解Redux中的減速器組成概念,並且我對如何在子減速器中設置初始狀態感到困惑。在Redux子減速器中設置初始狀態

類似的問題是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

兩者都可以工作。唯一想到的是,沒有初始狀態,它並不真正適合減速器的定義;它不會孤立地工作,因爲Redux預計初始狀態不會被定義。

在它是相當無害的設置在副減速器的初始狀態作爲

export default function stats(state = {}, action) { 
    // ... whwtever 
} 
任何情況下