公式Redux還元剤の例を理解しようとしています。公式還元還元剤の例が明確でない
私はこの「投稿」機能を誰が呼んでいるのかよくわからないのですが、別々に定義されている理由と、その機能がCombineReducerメソッドに公開されたことは一度もありません。
import { combineReducers } from 'redux'
import {
SELECT_SUBREDDIT, INVALIDATE_SUBREDDIT,
REQUEST_POSTS, RECEIVE_POSTS
} from './actions'
function selectedSubreddit(state = 'reactjs', action) {
switch (action.type) {
case SELECT_SUBREDDIT:
return action.subreddit
default:
return state
}
}
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
}
}
const rootReducer = combineReducers({
postsBySubreddit,
selectedSubreddit
})
export default rootReducer
私はそれが(REQUEST_POSTS)postsBySubredditを呼び出すことにより、一回呼び出されることを知っているが、アクションRECEIVE_POSTSが送出されたときにも、後の工程でそれが呼び出されます。
私はこのケースでは複数のリスナーを同じように扱っているようです。理由を理解しようとしています。
Daveと同じ質問です。後でRECEIVE_POSTSが送出されたときに、「投稿」がどのように呼び出されるのか分かりません。 postsBySubredditのRECEIVE_POSTS:のケースには、ハンドラ関数はありません。 – tito
'postsBySubreddit'関数は、switch文を使って3つのケースすべてを同じように処理しています。複数のケースを一列に並べることで、同じコードでそれぞれのケースを処理できます。したがって、3つのケース(INVALIDATE_SUBREDDIT、RECEIVE_POSTS、およびREQUEST_POSTS)はすべて同じ方法で処理されます:その特定の投稿のデータと現在のアクションで 'posts()'を呼び出すことによって。 – markerikson
私は今それを得る。素晴らしい答え。ありがとう – tito