2017-02-06 9 views
0

人。 私はreduxを学んできましたが、私が完全に理解することができなかった減速機については何かがあります。減速器の構成:減速器はそのケースの1つのみで別の減速器を呼び出していますが、それらの残りの部分ではまだ動作しています

redux docsには、簡単な例が示されています。 この例のレデューサーには、他のレデューサーを呼び出すレデューサーが1つあります。あなたが見ることができるように

function posts(state = { 
    isFetching: false, 
    didInvalidate: false, 
    items: [] 
}, action) { 
    switch (action.type) { 
    case INVALIDATE_SUBREDDIT: 
     return Object.assign({}, state, { 
     didInvalidate: true 
     }) 
    case REQUEST_POSTS: 
     return Object.assign({}, state, { 
     isFetching: true, 
     didInvalidate: false 
     }) 
    case RECEIVE_POSTS: 
     return Object.assign({}, state, { 
     isFetching: false, 
     didInvalidate: false, 
     items: action.posts, 
     lastUpdated: action.receivedAt 
     }) 
    default: 
     return state 
    } 
} 

function postsBySubreddit(state = {}, action) { 
    switch (action.type) { 
    case INVALIDATE_SUBREDDIT: 
    case RECEIVE_POSTS: 
    case REQUEST_POSTS: 
     return Object.assign({}, state, { 
     [action.subreddit]: posts(state[action.subreddit], action) 
     }) 
    default: 
     return state 
    } 
} 

は、postsBySubredditpostsを呼び出します: これは、これらの減速のためのコードです。これは分かります;それは減速剤の組成です。 私が理解していないのは、postsレデューサーがREQUEST_POSTSケースでのみ呼び出され、残りのセクションでは呼び出されない理由ですが、それ以外のケースでは状態が正しく更新されます。 私の欠陥のある論理は、次のようにpostsBySubredditは、すべてのケースで動作するためには、それは、RECEIVE_POSTSで同じメカニズムとINVALIDATE_SUBREDDIT例を採用する必要があることを私に語った:

function postsBySubreddit(state = {}, action) { 
    switch (action.type) { 
    case INVALIDATE_SUBREDDIT: 
     return Object.assign({}, state, { 
     [action.subreddit]: posts(state[action.subreddit], action) 
     }) 
    case RECEIVE_POSTS: 
     return Object.assign({}, state, { 
     [action.subreddit]: posts(state[action.subreddit], action) 
     }) 
    case REQUEST_POSTS: 
     return Object.assign({}, state, { 
     [action.subreddit]: posts(state[action.subreddit], action) 
     }) 
    default: 
     return state 
    } 
} 

私は何をしないのですか? ありがとうございます。 P.D.この例の完全なソースコードはhereです。

答えて

2

複数のスイッチケースが重なっている場合は、すべてボトムケースのステートメントが実行されます。

この場合

case INVALIDATE_SUBREDDIT: 
case RECEIVE_POSTS: 
case REQUEST_POSTS: 
    return Object.assign({}, state, { 
    [action.subreddit]: posts(state[action.subreddit], action) 
    }) 

素晴らしい[OK]を、

case INVALIDATE_SUBREDDIT: 
    return Object.assign({}, state, { 
    [action.subreddit]: posts(state[action.subreddit], action) 
    }) 
case RECEIVE_POSTS: 
    return Object.assign({}, state, { 
    [action.subreddit]: posts(state[action.subreddit], action) 
    }) 
case REQUEST_POSTS: 
    return Object.assign({}, state, { 
    [action.subreddit]: posts(state[action.subreddit], action) 
    }) 
+0

と同じです!今私はそれを得る。 Javascrpitのswitch文のfall-through機能、そうですか? [リンク] http://stackoverflow.com/questions/13207927/switch-statement-multiple-cases-in-javascript? –

+0

うん、あなたはそれを持っている – Mike

関連する問題