人。 私は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
}
}
は、postsBySubreddit
posts
を呼び出します: これは、これらの減速のためのコードです。これは分かります;それは減速剤の組成です。 私が理解していないのは、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です。
と同じです!今私はそれを得る。 Javascrpitのswitch文のfall-through機能、そうですか? [リンク] http://stackoverflow.com/questions/13207927/switch-statement-multiple-cases-in-javascript? –
うん、あなたはそれを持っている – Mike