【发布时间】:2017-07-04 15:36:35
【问题描述】:
这是我的店铺形状:
export default {
isRequesting: false,
requestError: null,
things: [],
otherThings: []
}
当从服务器获取 things 和 otherThings 时,isRequesting 会更改,requestError 可能会更改。目前,我正在像 reducers/thingReducer.js 和 reducers/otherThingReducer.js 这样的减速器中更改这些,例如:
// reducers/thingReducer.js
import { combineReducers } from 'redux'
import { LOAD_THINGS_REQUESTING, LOAD_THINGS_SUCCESS, LOAD_THINGS_ERROR } from '../actions/actionTypes'
import initialState from './initialState'
export function things(state = initialState.things, action) {
switch(action.type) {
case LOAD_THINGS_SUCCESS:
return action.things
default:
return state
}
}
export function isRequesting(state = initialState.isRequesting, action) {
switch(action.type) {
case LOAD_THINGS_REQUESTING:
return true
case LOAD_THINGS_SUCCESS:
return false
case LOAD_THINGS_ERROR:
return false
default:
return state
}
}
export function requestError(state = initialState.requestError, action) {
switch(action.type) {
case LOAD_THINGS_ERROR:
return action.error
default:
return state
}
}
const thingsReducer = {
things,
isRequesting,
requestError
}
export default thingsReducer
如您所见,我的 thingReducer 中有 isRequesting 和 requestError 的减速器,otherThingReducer 中也有同样的东西。
您可能还会看到我正在导出每个函数,以便我可以在rootReducer.js 中执行以下操作
const rootReducer = combineReducers({
...thingReducer,
...otherThingReducer
})
export default rootReducer
我从未在示例代码(展开reducer)中看到这样做,这让我认为每个reducer 文件应该只包含一个函数。我知道这是两个问题:
isRequesting和requestError是否应该存在于单独的 reducer 文件中(即使它们是全局状态的一部分)如果是这样,它们是否应该像我上面所做的那样分散和组合。即使1)的答案是否定的,当每个reducer文件实际上需要多个reducer时,我可以使用这种spread/combine方法吗?
【问题讨论】:
标签: javascript reactjs ecmascript-6 redux