2017-03-10 14 views
0

Reduxのレデューサー組成の概念を知りました。サブレデューサーの初期状態をどのように設定すべきか混乱しました。Reduxサブレデューサーの初期状態を設定する

同様の質問はthisでしたが、状態ツリーの各部分の最上位レデューサーにしか関係しません。

私が理解しているように、各レデューサーは、責任を負うステートツリーの部分の初期状態を提供する必要があります。例えば

、私はこのような状態の木を持っていた場合:

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

そして私はstatsmessagesのための1つのトップレベルのダッシュボード用減速機と同様に、減速していた、すべきですダッシュボードのパーツの初期状態をダッシュ​​ボードレデューサーに設定するか、各パーツのレデューサーに設定します。もしそうなら、このコードはどのように見えますか?私の推論が正しい

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レデューサの定義に適合しないということだけです。 Reduxは初期状態が未定義ではないと予想しているため、単独では動作しません。

いずれの場合においては、

export default function stats(state = {}, action) { 
    // ... whwtever 
} 
としてサブ減速に初期状態を設定することなく無害です
関連する問題